2010-05-05 4 views
2

По существу, я хочу сделать то, что говорит название, если ширина столбца равна 0,50, тогда прямоугольник должен быть красным, если он равен .75, тогда он должен быть янтарным, а если он равен 1, тогда он должен быть зеленым.Изменение прямоугольника Заполнение на основе столбца Ширина сетки

Я думал, что смогу добиться этого с помощью DataTriggers, но по какой-то причине я получаю сообщение об ошибке «Ссылка на объект, не установленное на экземпляр объекта», вот мой код, я что-то упустил?

FYI свойство ширины будет изменено в backend через событие 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> 

ответ

5

Это сработало для меня. Обратите внимание: я использовал 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> 
+0

Спасибо, я не могу поверить, что это было так просто :-) – Coesy