MSDN说"获取或设置一个可用于存储有关此元素的自定义信息的任意对象值." 这意味着我可以在这个属性中存储我想要的任何东西.
但是如果你绑定到这个属性(类型为String的属性,其值为"XYZ")并在触发条件下使用它,它就不起作用!
<Trigger Property="Tag" Value="XYZ">
<Setter Property="Background" Value="Red" />
</Trigger>
Run Code Online (Sandbox Code Playgroud)
它不会将背景设置为红色.您可以尝试将myElement假设为TextBlock!为什么会这样?
小智 9
这Tag是一个从Winforms时代开始的构造(也可能是之前的那个!).它被用作将对象与UI元素相关联的便利位置,例如带有Button的FileInfo,因此在Button的事件处理程序中,您可以简单地将事件发送者,将其强制转换为Button,然后将Tag值转换为a FileInfo,您可以获得有关要打开的文件的所有信息.
然而,有一种情况,我发现Tag它在WPF中很有用.我已经将它用作可以由ContextMenu MenuItem访问的保留点,它不能使用您用来遍历可视树的常规RelativeSource绑定.
<ListBox.ItemContainerStyle>
<Style
TargetType="ListBoxItem">
<Setter
Property="Tag"
Value="{Binding ElementName=TheUserControlRootElement}" />
<Setter
Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem
Header="_Remove"
ToolTip="Remove this from this list"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
Command="{Binding PlacementTarget.Tag.Remove, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)
从中ContextMenu,我无法访问在定义此代码段的类中定义的Remove命令UserControl.但我可以绑定根到Tag的ListBoxItem,这是我可以访问通过ContextMenu.PlacementTarget性能.在a中绑定时可以使用相同的技巧ToolTip,因为相同的限制适用.
Tag在WPF中没有特殊功能.
这对我有用:
<TextBlock Tag="{Binding Data}"
x:Name="tb">
<TextBlock.Style>
<Style>
<Style.Triggers>
<Trigger Property="TextBlock.Tag"
Value="XYZ">
<Setter Property="TextBlock.Background"
Value="Lime" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
并在事件中将Data对象属性设置为"XYZ".
| 归档时间: |
|
| 查看次数: |
15687 次 |
| 最近记录: |