В: Как связать пользовательское свойство родительского шаблона из стиля дочернего элемента управления DataTrigger
Я несколько дней ломал голову над этим.
У меня есть TreeView с привязкой к данным, который использует стиль с шаблоном.TreeView привязывается к ObservableCollection и HierarchicalDataTemplate + DataTemplate связываются со свойствами внутри элемента коллекции.
FontGroup -> Font (s)
<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
Если это некорректный дизайн, пожалуйста, предложите способ сделать это: я в основном хочу изменить изображение кнопки расширения в зависимости от того, истинно ли свойство IsItemSelected для TreeViewItem - есть идеи?
Большое спасибо за любую помощь!