我有一个ResourceDictionary
,其中包含几个DataTemplate
,这些DataTemplate
将用于显示具有以下属性的类:
public MyToolTip ToolTip {get;}
在DataTemplate
中,有几个控件会将它们的ToolTip
属性绑定到此属性。ResourceDictionary
还包含以下(演示)DataTemplate
:
<DataTemplate DataType="models:MyToolTip">
<Grid>
<TextBlock Text="{Binding Details}"/> <!-- MyToolTip class has a Details property -->
</Grid>
</DataTemplate>
我如何在ResourceDictionary的根级别声明无论何时显示MyToolTip
示例,都将使用上面的DataTemplate
?
1条答案
按热度按时间l2osamch1#
感谢您的回复!显然我所尝试的是不可能的。“普通”Xaml属性不支持“自动魔术”DataTemplate选择。
我确实做到了这一点:
使用
Style
,我可以更改ToolTip
属性,但是Style
不适用于派生类,也就是说,我需要为每个可能的类型实现带有正确TargetType
的样式。而且,我最初想确定 any 控件的 anyToolTip
如何呈现,如果它的值是MyToolTip
。但是,在这种情况下,将
ToolTip
设置为最外面的元素(例如SliderEditor
)是可以的,无论如何,任何嵌套的控件都会显示相同的工具提示。此外,在本例中,由于所有编辑器都派生自一个基类,因此我决定执行以下操作,因为这样可以避免编辑所有Xaml文件。
我实现了一个新的
UserControl
,而不是一个DataTemplate
:在基类的ctor中,我添加了:
注意:我试着让
ContentControl
“自动神奇地”检测到正确的DataTemplate
(当时仍然有一个DataType
),就像@Joe在评论中建议的那样,但是没有起作用。因为我选择了一种不同的方法,所以我没有再花更多的时间去寻找原因。