Изменение заливки прямоугольника на основе ширины столбца сетки
По существу, я хочу сделать так, как написано в заголовке, если ширина столбца равна .Тогда прямоугольник должен быть красным, если он есть .75 тогда он должен быть янтарным, а если он равен 1, то он должен быть зеленым.
Я думал, что смогу достичь этого с помощью DataTriggers, но по какой-то причине я получаю ошибку "ССЫЛКА на объект не установлена на экземпляр объекта", вот мой код, я что-то упускаю?
К вашему сведению, свойство width будет изменено в бэкэнде через событие timer_tick.
<Grid x:Name="Grid1" Width="300" Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
<ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.Triggers>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
<Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
<Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
<Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
</DataTrigger>
</Grid.Triggers>
<Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
<Rectangle Grid.Column="1" Fill="Blue"></Rectangle>
</Grid>
1 ответ:
Это сработало для меня. Обратите внимание, что я использовал
Style
для установки триггеров наRectangle
.<Grid x:Name="Grid1" Width="300" Height="30"> <Grid.ColumnDefinitions> <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition> <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition> </Grid.ColumnDefinitions> <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"> <Rectangle.Style> <Style TargetType="{x:Type Rectangle}"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*"> <Setter Property="Fill" Value="Red"></Setter> </DataTrigger> <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*"> <Setter Property="Fill" Value="Yellow"></Setter> </DataTrigger> <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1"> <Setter Property="Fill" Value="Green"></Setter> </DataTrigger> </Style.Triggers> </Style> </Rectangle.Style> </Rectangle> <Rectangle Grid.Column="1" Fill="Blue"></Rectangle> </Grid>