私は基本的に、ボタンのホバーにポップアップを実装しようとしています。ユーザーがボタンにカーソルを合わせると、ポップアップが表示されます。そうでないときは、ラベルだけを表示したい。ある程度の時間が経過した後にポップアップが消えたくないことを除いて、ツールチップのようなものです。ボタンで ControlTemplate を使用して動作させるには、次の 2 つの注意事項があります。
ボタンの下の領域にカーソルを合わせると、ポップアップとラベルの間で画面がちらつきます。- ポップアップを下と中央に揃えたい。
Xaml コード:
<Window>
<Window.Resources>
<Style x:Key="LabelStyle" TargetType="Label">
<Setter Property="Margin" Value="0, 0, 0, 5" />
<Setter Property="Width" Value="58" />
<Setter Property="Height" Value="28" />
<Setter Property="Padding" Value="1, 0, 1, 0" />
</Style>
<ControlTemplate x:Key="ButtonControlTemplate" TargetType="Button">
<StackPanel>
<Button Width="48" Height="48" Background="White" Name="ItemButton">
<ContentPresenter Content="{TemplateBinding Property=ContentControl.Content}" />
</Button>
<Label Style="{StaticResource LabelStyle}" VerticalContentAlignment="Top" HorizontalContentAlignment="Center" Name="ItemLabel">
<TextBlock TextWrapping="Wrap" TextAlignment="Center" FontSize="11" LineHeight="13" LineStackingStrategy="BlockLineHeight">
Hello World!
</TextBlock>
</Label>
<Popup Name="ItemPopup" Placement="Bottom" PlacementTarget="{Binding ElementName=ItemButton}">
<TextBlock Background="Red">Hello World!</TextBlock>
</Popup>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger SourceName="ItemButton" Property="IsMouseOver" Value="True">
<Setter TargetName="ItemLabel" Property="Visibility" Value="Hidden" />
<Setter TargetName="ItemPopup" Property="IsOpen" Value="True" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<StackPanel>
<Button Background="Green" Template="{StaticResource ButtonControlTemplate}">
<Image Source="http://leduc998.files.wordpress.com/2010/10/msft_logo.jpg" />
</Button>
</StackPanel>
</Window>
編集:ちらつきの問題を修正しました。ポップアップの配置が下と中央になるようにするだけです。