Поддержание визуальных свойств по умолчанию с ControlTemplate - PullRequest
0 голосов
/ 27 августа 2009

Чтобы применить активированную анимацию ко всем ToolTip в моем приложении, я использую ControlTemplate. Однако при использовании ControlTemplate ToolTip теряет все свои визуальные свойства по умолчанию, как я полагаю, согласно теме. Как сохранить все свойства, кроме тех, которые я переопределяю?

Используя следующий код

<ToolTip Opacity="0.8">
  <ToolTip.Content>
    <StackPanel>
      <Label FontWeight="Bold" Background="DarkSlateBlue" Foreground="White">
        WpfApplication1
      </Label>
      <Label>
        Click to create another button
      </Label>
    </StackPanel>
  </ToolTip.Content>
</ToolTip>

Я получаю желаемый результат:

альтернативный текст http://img29.imageshack.us/img29/1488/controltemplateno.png

Но когда я настраиваю код для использования ControlTemplate следующим образом:

<ControlTemplate x:Key="controltemplateToolTip" TargetType="{x:Type ToolTip}">
  <ContentPresenter Content="{TemplateBinding Content}" />  
  <ControlTemplate.Triggers>
    <EventTrigger RoutedEvent="ToolTip.Loaded">
      <BeginStoryboard>
        <Storyboard TargetProperty="Opacity">
          <DoubleAnimation From="0" To="0.8" Duration="0:0:0.2" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </ControlTemplate.Triggers>
</ControlTemplate>
<Style TargetType="{x:Type ToolTip}">
  <Setter Property="Template" Value="{StaticResource controltemplateToolTip}" />
</Style>
...
<ToolTip>
  <ToolTip.Content>
    <StackPanel>
      <Label FontWeight="Bold" Background="DarkSlateBlue" Foreground="White">
        WpfApplication1
      </Label>
      <Label>
        Click to create another button
      </Label>
    </StackPanel>
  </ToolTip.Content>
</ToolTip>

Я получаю следующее:

альтернативный текст http://img43.imageshack.us/img43/8217/controltemplateyes.png

Как видите, границы темы по умолчанию, фон и т. Д. Не поддерживаются. Я не хочу устанавливать их явно, так как я хочу, чтобы они настраивались в соответствии с темой пользователя. Как я могу исправить это? Я поступаю неправильно?

1 Ответ

2 голосов
/ 02 сентября 2009

Вы не можете наследовать ControlTemplate от стиля темы. Но ты не обязан. Используйте DataTemplates для достижения того, что вы хотите. Вот быстрый пример:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
  <Style TargetType="{x:Type ToolTip}">
  <Style.Triggers>
    <EventTrigger RoutedEvent="ToolTip.Loaded">
      <BeginStoryboard>
        <Storyboard TargetProperty="Opacity">
          <DoubleAnimation From="0" To="0.8" Duration="0:0:0.5" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Style.Triggers>
  </Style>

<DataTemplate x:Key="ToolTipContentTemplate">
<StackPanel>
      <Label FontWeight="Bold" Background="DarkSlateBlue" Foreground="White">
        WpfApplication1
      </Label>
      <Label>
        Click to create another button
      </Label>
    </StackPanel>
</DataTemplate>
  </Page.Resources>

  <Grid>  
<Button Content="Hello">
<Button.ToolTip>
<ToolTip ContentTemplate="{StaticResource ToolTipContentTemplate}">
  <ToolTip.Content>
    Doesn't matter in this case
  </ToolTip.Content>
</ToolTip>
</Button.ToolTip>
</Button>
  </Grid>
</Page>

Вы можете вставить его в Kaxaml и проверить его.

Надеюсь, это поможет.

...