[WPF] ワンランク上のPOPUP コントロール

POPUP コントロール についてです。
よく 「ボタンを押す」→「ポップアップ出す」というデザインを使います。

ポップアップの動作的にはこんな感じになると思います。

  1. ボタンを押す。
  2. ポップアップを表示させる。
  3. ポップアップ以外の場所をクリックするとポップアップが閉じる。

ただね、

  1. ボタンを押す。
  2. ポップアップを表示させる。
  3. ボタンをクリックする。
  4. ボタンを押す時のMouseDownでポップアップが閉じる。
    MouseUPでポップアップが表示される。

ポップアップ閉じてくれえええええ


はい。
すっごい探しまして見つけました。
ToggleButton のNameを指定しないといけませんが、仕方ないでしょう。

<Grid>
	<ToggleButton Name="tbWithPopup" Width="30" Height="30"
			   IsChecked="{Binding ElementName=pUp, Path=IsOpen}">
		<ToggleButton.Style>
			<Style TargetType="ToggleButton">
				<Style.Triggers>
					<DataTrigger Binding="{Binding ElementName=pUp, Path=IsOpen}" Value="True">
						<Setter Property="IsHitTestVisible" Value="False" />
					</DataTrigger>
				 </Style.Triggers>
			</Style>
		</ToggleButton.Style>
		<Polygon Points="0,0 2,0, 1,1" Fill="Black" Stretch="Fill" />
	</ToggleButton>
		
	<Popup Name="pUp"
		   PlacementTarget="{Binding ElementName=tbWithPopup}"
		   AllowsTransparency="True" StaysOpen="False" Width="200">
		<RichTextBox IsReadOnly="True">
			<RichTextBox.Document>
				<FlowDocument>
					<Paragraph>
					   Checkout WPF Tat for more elegant 
					   solutions
					</Paragraph>
				</FlowDocument>
			</RichTextBox.Document>
		</RichTextBox>
	</Popup>
</Grid>

この人神様かな?
WPF TaT: ToggleButton with Popup