鉴于我有一个名为SomeControl
在MyUserControl.xaml中,我使用SomeControl
,如下所示:
<Grid.Resources>
<Window.Resources>
<Style TargetType="local:SomeControl">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<TextBlock Text="FOO"/>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
</Grid.Resources>
<Grid>
<!-- Others controls in here -->
<local:SomeControl />
</Grid>
在Window.xaml中:
<Window.Resources>
<Style TargetType="local:SomeControl">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<TextBlock Text="BAR"/>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<local:MyUserControl />
</Grid>
结果是,当我希望它显示Foo
时,它会显示Bar
。
如果我从UserControl中删除工具提示,则使用Window的样式,它会像我期望的那样显示Bar
。
为什么Window样式在显示时不会覆盖UserControl显式ToolTip属性,但是在删除时会这样做吗?
为了记录,我还尝试更改MyUserControl以使用相同x:Key
名称的DynamicResource并且没有任何影响。
将两者更改为ToolTipService.ToolTip也会产生相同的结果。
编辑:我修复了示例,以证明即使工具提示没有在本地级别设置,它仍然不会覆盖样式。
答案 0 :(得分:0)
除非有人能够回答如何覆盖工具提示的子项风格,否则我最终会将{4}上的ToolTip对象设为依赖属性并将其传递给MyUserControl
。
我创建的依赖项属性称为SomeControl
MyUserControl.xaml:
ExampleToolTip
Window.xaml:
<UserControl x:Name='MainControl'>
<UserControl.Resources>
<ToolTip x:Key="DefaultSomeControlToolTip">
<TextBlock Text="FOO"/>
<ToolTip>
</UserControl.Resources>
<Grid>
<local:SomeControl ToolTip="{Binding ExampleToolTip, ElementName=MainControl, TargetNullValue={StaticResource DefaultSomeControlToolTip}}"/>
</Grid>
</UserControl>
现在我可以使用<Grid>
<local:MyUserControl>
<local:MyUserControl.ExampleToolTip>
<ToolTip>
<TextBlock Text="BAR"/>
</ToolTip>
</local:MyUserControl.ExampleToolTip>
</local:MyUserControl>
</Grid>
特殊的&#34; FOO&#34; MyUserControl
和SomeControl
上的工具提示有&#34; BAR&#34;工具提示覆盖它。