Изменить шаблон стиля всплывающей подсказки

#c# #wpf

#c# #wpf

Вопрос:

Я хочу иметь возможность назначать разные стили всплывающих подсказок стилю других элементов управления

Например, у меня есть стиль для моей всплывающей подсказки:

  <Style x:Key="BorderedInfoTooltip" TargetType="{x:Type ToolTip}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToolTip}">
                    <Border Background="DarkSlateGray" BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="2">
                        <StackPanel Orientation="Horizontal">
                            <Image Width="32" Height="32" Source="Resources/info.png" />
                            <ContentPresenter Content="{TemplateBinding Content}"/>
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
  

И стиль для моих изображений значков:

     <Style x:Key="IconStyle" TargetType="Button">
        <Setter Property="VerticalAlignment" Value="Center"></Setter>
        <Setter Property="HorizontalAlignment" Value="Center"></Setter>
        <Setter Property="Width" Value="20"></Setter>
        <Setter Property="Height" Value="20"></Setter>
    </Style>
  

Как сделать так, чтобы эти кнопки (со стилем == icontyle) имели мой стиль всплывающей подсказки?

Комментарии:

1. Я внес небольшие изменения, для какого элемента управления он должен быть применен, предположим, мы применили мою всплывающую подсказку к кнопкам

Ответ №1:

Вместо того, чтобы размещать всплывающую подсказку вне стиля значка, поместите ее в ресурсы стиля изображения и пропустите ключ следующим образом:

 <Style x:Key="IconStyle" TargetType="Image">
  <Style.Resources>
    <Style TargetType="{x:Type ToolTip}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ToolTip}">
            <Border Background="DarkSlateGray" BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="2">
              <StackPanel Orientation="Horizontal">
                <Image Width="32" Height="32" Source="Resources/info.png" />
                <ContentPresenter Content="{TemplateBinding Content}"/>
              </StackPanel>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Style.Resources>
  <Setter Property="VerticalAlignment" Value="Center"></Setter>
  <Setter Property="HorizontalAlignment" Value="Center"></Setter>
  <Setter Property="Width" Value="20"></Setter>
  <Setter Property="Height" Value="20"></Setter>
</Style>
  

Редактировать:

Или вы можете оставить его в качестве глобального или ресурсов Windows и ссылаться на него в ресурсах Iconstyle следующим образом:

 <Style x:Key="IconStyle" TargetType="Image">
  <Style.Resources>
    <Style TargetType="ToolTip" BasedOn="{StaticResource BorderedInfoTooltip}" />
  </Style.Resources>
...
  

Комментарии:

1. Но я полагаю, что другие элементы управления также, вероятно, будут иметь этот стиль всплывающей подсказки

2. @AndreyIschencko: смотрите мое дополнение.

Ответ №2:

Почему вы не можете установить свой стиль изображения следующим образом :

 <Image Width="32" Height="32" Source="Resources/info.png" Style="{StaticResource IconStyle}"/>
  

Комментарии:

1. О, вы этого не понимаете. У меня много изображений. Я хочу иметь стиль шаблона всплывающей подсказки, и эта подсказка будет включать небольшое информационное изображение info.png