2010-02-11 5 views
12

Как определить DataTrigger для StackPanel? Он имеет свойство Trigger, но определение триггера здесь дает следующее сообщение об ошибке на Initialize при запуске приложения:Определение DataTrigger для StackPanel

Ошибка инициализации объекта (ISupportInitialize.EndInit). Элементы коллекции триггеров должны иметь тип EventTrigger. ....

Это дается из следующего простого DataTrigger:

<StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}"> 
    <TextBlock Text="{Binding Id}" /> 
    <TextBlock Text="{Binding Name}" /> 
    <StackPanel.Triggers> 
     <DataTrigger Binding="{Binding Id}" Value="1"> 
      <Setter TargetName="PersonPanel" Property="StackPanel.Background" Value="Green" /> 
     </DataTrigger>     
    </StackPanel.Triggers> 
</StackPanel> 

Это мой первый Trigger когда-либо, так что я делаю не так? Должен ли я определять Trigger в другом месте?

ответ

11

Попробуйте что-то вроде этого

<Window.Resources> 
     <Style x:Key="spStyle" TargetType="StackPanel"> 
      <Setter Property="StackPanel.Background" Value="Red" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Id}" Value="1"> 
        <Setter Property="StackPanel.Background" Value="Green" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <StackPanel x:Name="PersonPanel" Style="{StaticResource spStyle}" DataContext="{Binding CurrentPerson}"> 
     <TextBlock Text="{Binding Id}" /> 
     <TextBlock Text="{Binding Name}" /> 
    </StackPanel> 
+0

Thx! Прекрасно работает :-) – stiank81

7

попробовать это:

<TextBlock Text="{Binding Id}"> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <Trigger Property="TextBlock.Text" Value="1"> 
        <Setter TargetName="PersonPanel" Property="StackPanel.Background" Value="Green" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+1

Thx! Это работает, но я пошел с решением Фейсала. – stiank81

+0

Добро пожаловать. –

Смежные вопросы