2017-08-23 33 views
0

鉴于我有一个控制从什么地方叫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> 

结果是当我想让它显示Bar时,它会显示Foo。 如果我从UserControl中删除工具提示,就会使用Window的样式,并且它会像我期望的那样显示Bar

为什么Window样式不存在时覆盖UserControl显式ToolTip属性,但在删除时会如何?

为了记录,我也尝试更改MyUserControl以使用名称相同的x:Key的DynamicResource并且没有任何影响。

将两者都更改为ToolTipService.ToolTip也具有相同的结果。

编辑:我修正了这个例子,说明即使ToolTip没有在本地级别上设置,它仍然不会覆盖样式。

+0

为什么您的样式是针对SomeControl的,但您的控件名为MyUserControl? – SledgeHammer

+0

因为用户控件内部的类型是'SomeControl'。我没有试图定位'MyUserControl',我试图定位'SomeControl'。 'Window'有一个'UserControl',它有一个'SomeControl'工具提示在'SomeControl'上,而不是'UserControl' – user99999991

回答

0

除非有人能够回答如何重写子工具提示的风格,否则我最终将ToolTip对象设置为依赖属性MyUserControl并将其传递给SomeControl

我所做的依赖项属性被称为ExampleToolTip

MyUserControl.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> 

Window.xaml:

<Grid> 
    <local:MyUserControl> 
    <local:MyUserControl.ExampleToolTip> 
     <ToolTip> 
      <TextBlock Text="BAR"/> 
     </ToolTip> 
    </local:MyUserControl.ExampleToolTip> 
    </local:MyUserControl> 
</Grid> 

现在我可以用MyUserControl与它的特殊的 “富” 工具提示在SomeControlWindow有其“BAR”工具提示覆盖它。

+1

据我所知(而且从测试),它不会钻取可视化树。它只将它应用于顶层控件,并且如果控件位于像ListBoxItem这样的容器中,则可以执行您正在尝试执行的操作。如果您在对话框上粘贴了TextBlock和Button并尝试将字体权重应用于TextBlock类型,则可以看到此内容。只有实际的TextBlock类型才会提取它。该按钮内的TextBlock没有。 – SledgeHammer