Q: 子コントロールのスタイル DataTrigger からテンプレートの親のカスタム プロパティにバインドするにはどうすればよいですか?
私はこれについて数日間頭を悩ませてきました。
テンプレートを持つスタイルを使用するデータバインドされた TreeView があります。TreeView は ObservableCollection にバインドされ、HierarchicalDataTemplate + DataTemplate はコレクション アイテム内のプロパティにバインドされます。
FontGroup -> フォント
<Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Image x:Name="ExpanderImage" Source="/Typesee;component/Resources/tree_expand.png" RenderOptions.BitmapScalingMode="NearestNeighbor" />
<ControlTemplate.Triggers>
<DataTrigger Binding="??? IsItemSelected ???" Value="True">
<Setter TargetName="ExpanderImage" Property="Source" Value="/Typesee;component/Resources/tree_collapse_selected.png" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="FontTreeViewTemplate" TargetType="{x:Type TreeViewItem}">
...
<ToggleButton x:Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" ... />
...
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsItemSelected}" Value="True">
<!-- WORKS FINE HERE -->
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
最初に次のようにバインドしようとしました:
Binding Path=IsItemSelected, RelativeSource={RelativeSource TemplatedParent}
次に、それが機能しない可能性があることを読んだので、試しました(AncestorLevel 1 + 3を含む):
Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2
UpdateSourceTrigger=PropertyChanged と Mode=TwoWay の組み合わせも試しました
これが欠陥のある設計である場合は、これを行う方法を提案してください: 基本的に、TreeViewItem でプロパティ IsItemSelected が true であるかどうかに基づいて、展開トグル ボタンの画像を変更したいと考えています。
助けてくれてありがとう!