窗口样式资源在存在时不会覆盖UserControl属性

时间:2017-08-23 22:57:55

标签: c# .net wpf xaml user-controls

鉴于我有一个名为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也会产生相同的结果。

编辑:我修复了示例,以证明即使工具提示没有在本地级别设置,它仍然不会覆盖样式。

1 个答案:

答案 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; MyUserControlSomeControl上的工具提示有&#34; BAR&#34;工具提示覆盖它。