2016-03-23 20 views
0

私はItemTemplateSelectorを持つListBoxを持っています。テンプレートセレクタによって返されるすべてのデータテンプレートにはBorderがあります。ボーダーの背景色がマウスの上にあるときに変更したいと思います。これを達成するために、ListBoxItemコントロールテンプレートにIsMouseOverのトリガーを追加しましたが、データテンプレートの境界線をトリガーのセッターから参照する方法はわかりません。私の最善の策は、以下のセッターだったが、それは何の効果がなかった:コントロールテンプレート内のデータにアクセスするテンプレートの要素

<Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="Border.Background" Value="Yellow" /> 
</Trigger> 

何とか国境を見つけるために、コード内のビジュアルツリーをXAMLでこれを行うために、または多分ドリルダウンする方法はありますか?

また、ListBoxでアイテムが選択されているときにボーダーの背景色を変更したいと思います。私は、次のようなListBoxItemスタイルでForegroundを変えることができることを知っている:

  <ListBox.ItemContainerStyle> 
       <Style TargetType="{x:Type ListBoxItem}"> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="Foreground" Value="Red"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </ListBox.ItemContainerStyle> 

が、DataTemplateBorderがトリガーのブラシを受けないようにForegroundとは異なり、Backgroundは、継承されていません。

+1

アイテムテンプレートは、内部に何があるかを知る方法がないため、外側に何が起こっても、それ以外の方法では発生しません。また、視覚的な木を乱さないようにしてください。何も良いことはありません。 –

+0

@ H.B。確かに、データテンプレートにIsMouseOverトリガーを配置することができます。そのため、解決されています。しかし、データテンプレートはそれがListBoxItemに存在し、選択されたアイテムになっていることを決して知らないので、色を変更する必要があります。それとも? ListBoxのみがそのことを知っているので、ListBoxItemコントロールテンプレートを使用しています。 – Drew

+0

選択肢が 'DataTemplate'から独立している場合は、最初の場所でテンプレート内の何かに影響を与えるべきかどうかという疑問があります。これは、一般的に行うことではありません。 'DataTemplate'が選択に応答する必要がある場合、最初にその論理をその' DataTemplate'の中に置くことも意味があります。 –

答えて

0

データテンプレートのデータトリガーを使用してListBoxでアイテムが選択された場合、BorderBackgroundを変更することができました。

 <DataTemplate DataType="{x:Type model:Topic}" x:Key="TopicNameDataTemplate"> 
      <Grid> 
       <Border x:Name="Border" ... > 
        ... 
       </Border> 
      </Grid> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}" 
          Value="True"> 
        <Setter TargetName="Border" Property="Background" Value="Orange"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
関連する問題