Wpf:在多个控件上应用自定义样式的ToolTip

时间:2010-12-08 07:20:54

标签: c# wpf tooltip styles controltemplate

我正在使用WPF应用程序。我已经创建了一个自定义控件库,我已经自定义了所有控件,这意味着添加了一些功能并重新设置它们。同样,我也重新设计了ToolTip。我在其他项目中使用此自定义库。除了ToolTip之外,一切正常。工具提示样式未应用。任何帮助PLZ。

编辑:

我创建了一个名为ToolTip的自定义类,它派生自System.Windows.Controls.ToolTip,我也为自定义类声明了样式。现在我想知道如何将这个样式应用于每个控件的ToolTip,我的意思是每当用户在控件上设置ToolTip时我想创建ToolTip的对象。

<。>在.cs:

public class ToolTip : System.Windows.Controls.ToolTip
{
    static ToolTip()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(ToolTip), new FrameworkPropertyMetadata(typeof(ToolTip)));
    }
}

在.xaml(资源字典)中:

<Style TargetType="{x:Type local:ToolTip}">
    <Setter Property="VerticalOffset" Value="-2" />
    <Setter Property="HorizontalOffset" Value="20" />
    <Setter Property="Height" Value="35"></Setter>
    <Setter Property="Placement" Value="Top" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ToolTip}">
                <Grid Name="Border" Background="Transparent" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                    <Rectangle RadiusX="7.5" RadiusY="7.5">
                        <Rectangle.Fill>
                            <LinearGradientBrush StartPoint="0.5,-0.5" EndPoint="0.547,0.913">
                                <GradientStop Color="#FFEEEEEE" Offset="0"/>
                                <GradientStop Color="#FFBBBBBB" Offset="1"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter Margin="10,0,10,0" HorizontalAlignment="Center" VerticalAlignment="Center" TextBlock.Foreground="Black" TextBlock.FontSize="12" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

任何帮助PLZ。

2 个答案:

答案 0 :(得分:2)

如果您的自定义ToolTip课程仅用于应用模板,则为工具提示使用隐式样式要容易得多:

<Style TargetType="{x:Type ToolTip}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <!-- rest of your style here -->
</Style>

答案 1 :(得分:2)

将默认的ToolTip样式放在单独的程序集中的共享ResourceDictionary中将允许多个项目使用它。您可以使用以下命令将SharedStyleLibrary.dll的Resources文件夹中的MyDefaultStyles ResourceDictionary合并到App.xaml中:

  <App.Resources>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="/SharedStyleLibrary;component/Resources/MyDefaultStyles.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </App.Resources>

如果MyDefaultStyles包含隐式工具提示样式(<Style TargetType="{x:Type ToolTip}"> )它将被用作默认值。你也可以在本地更多地定位它,而不是给Style一个x:Key,然后在你希望它应用的任何范围内创建一个隐式的ToolTip Style(即Window,UserControl,单一布局面板):

<Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource ExternalLibraryNamedStyle}">...