Wpf: применить пользовательский стиль всплывающей подсказки для нескольких элементов управления - PullRequest
2 голосов
/ 08 декабря 2010

Я работаю с приложением WPF. Я создал пользовательскую библиотеку элементов управления, в которой я настроил все элементы управления, то есть добавил некоторые функции и изменил их стиль. Так же, как и рестайлинг всплывающей подсказки. Я использую эту пользовательскую библиотеку в других проектах. Все работает нормально, кроме всплывающей подсказки. Стиль всплывающей подсказки не применяется. Любая помощь плз.

Edit:

Я создал собственный класс с именем ToolTip, который является производным от System.Windows.Controls.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>

Любая помощь, плз.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Размещение стиля всплывающей подсказки по умолчанию в общем ResourceDictionary в отдельной сборке позволит использовать его в нескольких проектах. Вы можете объединить MyDefaultStyles ResourceDictionary в папке «Ресурсы» SharedStyleLibrary.dll с 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 в любой области, которую вы хотите применить (например, Window, UserControl, отдельная панель макета):

<Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource ExternalLibraryNamedStyle}">...
2 голосов
/ 08 декабря 2010

Если ваш пользовательский класс ToolTip предназначен только для применения шаблонов, гораздо проще использовать неявный стиль для ваших всплывающих подсказок:

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