是否可以设置元素自己的属性?

本文关键字:自己的 属性 元素 设置 是否 | 更新日期: 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>

请注意,我使用TriggerSourceName而不是DataTrigger(尽管后者也可以工作)。至于Setter,您需要设置TargetName="myExpander"来设置扩展器的属性—如果您没有指定TargetName,则设置器将尝试在DataTemplate本身上设置属性。

至少这是理论上的解决方案。在实践中,它将不起作用(或至少不像你期望的那样),因为基于IsKeyboardFocusWithin的触发器不是一个很好的选择,我认为你正在努力实现。更好的选择是订阅LostFocus事件。