是否可以设置元素自己的属性?
本文关键字:自己的 属性 元素 设置 是否 | 更新日期: 2023-09-27 18:17:02
我试图在DataTrigger中设置expander IsExpanded属性。
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander x:Name="myExpander" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=myExpander, Path=IsKeyboardFocusWithin}" Value="False">
<Setter TargetName="Self" Property="IsExpanded" Value="False" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
问题是当我写像
这样的代码TargetName="myExpander"
我想要一些关键字,如"自我"或"。"-将Setter目标与其父元素关联起来并找到它。
我想你要找的是这个:
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander x:Name="myExpander" />
<DataTemplate.Triggers>
<Trigger SourceName="myExpander" Property="IsKeyboardFocusWithin" Value="False">
<Setter TargetName="myExpander" Property="IsExpanded" Value="False" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
请注意,我使用Trigger
和SourceName
而不是DataTrigger
(尽管后者也可以工作)。至于Setter
,您需要设置TargetName="myExpander"
来设置扩展器的属性—如果您没有指定TargetName
,则设置器将尝试在DataTemplate
本身上设置属性。
至少这是理论上的解决方案。在实践中,它将不起作用(或至少不像你期望的那样),因为基于IsKeyboardFocusWithin
的触发器不是一个很好的选择,我认为你正在努力实现。更好的选择是订阅LostFocus
事件。