私は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>
が、DataTemplate
でBorder
がトリガーのブラシを受けないようにForeground
とは異なり、Background
は、継承されていません。
アイテムテンプレートは、内部に何があるかを知る方法がないため、外側に何が起こっても、それ以外の方法では発生しません。また、視覚的な木を乱さないようにしてください。何も良いことはありません。 –
@ H.B。確かに、データテンプレートにIsMouseOverトリガーを配置することができます。そのため、解決されています。しかし、データテンプレートはそれがListBoxItemに存在し、選択されたアイテムになっていることを決して知らないので、色を変更する必要があります。それとも? ListBoxのみがそのことを知っているので、ListBoxItemコントロールテンプレートを使用しています。 – Drew
選択肢が 'DataTemplate'から独立している場合は、最初の場所でテンプレート内の何かに影響を与えるべきかどうかという疑問があります。これは、一般的に行うことではありません。 'DataTemplate'が選択に応答する必要がある場合、最初にその論理をその' DataTemplate'の中に置くことも意味があります。 –