2010-11-03 1 views
1

У меня есть собственный стиль в списке, я использую шаблон шаблона стиля, а также шаблон управления. В шаблоне данных я создаю элемент списка с некоторыми текстовыми полями. В шаблоне управления я хочу создать триггер, который изменит цвет переднего плана некоторого текстового поля, если выбран элемент списка.WPF-trigger target не найден

Вот некоторые из стиля:

<Style x:Key="lbStyle" TargetType="{x:Type ListBox}"> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid Name="MainGrid"> 
         <TextBlock Name="tbName" Text="{Binding Value.nick}" 
             Grid.Column="0" Grid.Row="0" Margin="2,2,2,2" 
             FontSize="13" FontWeight="Medium"></TextBlock> 
        </Grid> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="tbName" Property="Foreground" Value="Black"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 

Проблема, я получаю ошибку компиляции: Не удается найти целевой триггер tbName.

ответ

0
<Style TargetType="ListBox"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="{Binding}" Margin="2" FontSize="13" FontWeight="Medium"> 
        <TextBlock.Style> 
         <Style BasedOn="{StaticResource {x:Type TextBlock}}" TargetType="TextBlock"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}, Path=IsSelected}" Value="True"> 
            <Setter Property="Foreground" Value="Black"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBlock.Style> 
       </TextBlock> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
0

Возможно, что ваш код шаблона неверен. Вы применяете шаблон ListBoxItem к шаблону ListBox. Кроме того, вы не добавили ничего в ControlTemplate.

Я переписан его:

<Style x:Key="itemStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <ContentPresenter x:Name="itemContent"/> 

        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="itemContent" Property="TextBlock.Foreground" Value="Red"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

ListBox с прикладным стилем:

<ListBox ItemContainerStyle="{StaticResource itemStyle}" />