我希望能够在某些MenuItem上为工具提示指定样式,我该怎么做?

时间:2016-04-18 19:43:37

标签: wpf

我想为我的视图上的一些MenuItem控件的工具提示指定一个模板。我已将以下内容放入资源字典中:

'America/New_York'

然后在其中一个观点中我尝试过使用它:

<Style TargetType="{x:Type ToolTip}" x:Key="MenuItemToolTip">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ToolTip">
            <HeaderedContentControl>
                <HeaderedContentControl.Header>
                    <TextBlock FontSize="20" Background="#2288C6" Foreground="White" Padding="3">Click to report a bug</TextBlock>
                </HeaderedContentControl.Header>
                <HeaderedContentControl.Content>
                    <StackPanel>
                        <TextBlock Margin="0,5">Please do <Run FontWeight="Bold">not</Run> change the send To email address.</TextBlock>
                        <TextBlock>Also, leave the <Run FontStyle="Italic">BUG: BOTS</Run> in the subject line alone.</TextBlock>
                        <!-- more text blocks, but removed for brevity -->
                    </StackPanel>
                </HeaderedContentControl.Content>
            </HeaderedContentControl>
        </ControlTemplate>
    </Setter.Value>
</Setter>

起初我尝试过这个,但这也很糟糕:

<MenuItem Background="{x:Null}" Foreground="#FF706C6C" Command="{Binding ViewBugReportingCommand}">
<MenuItem.Style>
    <Style Resources="{StaticResource MenuItemToolTip}" />
</MenuItem.Style>
<MenuItem.Header>
    <Path Data="{StaticResource BugIconData}"
          Stretch="Uniform"
          Fill="#77000000"
          Width="20"
          RenderTransformOrigin="0.25,0.25"
          Height="20" />
</MenuItem.Header>

那么,如何将我的样式放入资源字典中以便我可以在某些MenuItem上使用它,但不是全部?

2 个答案:

答案 0 :(得分:2)

第一种方法的问题是Style.Resources接受了ResourceDictionary,但您将其设置为Style

您的第二种方法不起作用,因为您正在将Style对象应用于ToolTip属性。因此创建了一个隐式ToolTip,它试图渲染你的风格。但由于Style不是UIElement, 你得到的是一个TextBlock,它的Text属性设置为从Style.ToString返回的任何文本,默认情况下是Style类的名称。

这里最简单的方法是为每个ToolTip明确创建一个MenuItem并在那里设置样式。例如:

<MenuItem Background="{x:Null}" Foreground="#FF706C6C" Command="{Binding ViewBugReportingCommand}">
    <MenuItem.ToolTip>
        <ToolTip Style={StaticResource MenuItemToolTip} Content="Your Tooltip text" />
    </MenuItem.ToolTip>
</MenuItem>

另一种选择是将隐式样式添加到MenuItem的Resources属性,以便它将被应用 到ToolTip的可视树内的所有MenuItem

<MenuItem ToolTip="Hello">
    <MenuItem.Resources>
        <Style TargetType="{x:Type ToolTip}">
            .. setters
        </Style>
    </MenuItem.Resources>
</MenuItem>

我更喜欢前者,因为它是最简单的。

答案 1 :(得分:1)

您可以使用工具提示控件直接指定工具提示样式:

<MenuItem Background="{x:Null}"
          Foreground="#FF706C6C"
          Command="{Binding ViewBugReportingCommand}">
    <MenuItem.ToolTip>
        <ToolTip Style="{StaticResource MenuItemToolTip}" />
    </MenuItem.ToolTip>
    ...
</MenuItem>