リソースとして宣言されたポップアップ スタイルがあります。私はこのポップアップを開いたときに(データトリガーを使用して)PlacementTarget IsMouseOver = true
、ポップアップ自体が表示されたときに開きますIsMouseOver = True
。IsMouseOver = False
ポップアップがポップアップを閉じるときのトリガーを追加しました。ただし、ユーザーがポップアップの外側をクリックしない限り、開いたままになります。マウスがポップアップを離れて配置ターゲットの上にないときに閉じたい。
これが私のポップアップスタイルです:
<Style x:Key="FTC_PopupStyle" TargetType="{x:Type Popup}">
<Setter Property="StaysOpen" Value="False"/>
<Setter Property="PopupAnimation" Value="Slide"/>
<Setter Property="AllowsTransparency" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="False">
<Setter Property="IsOpen" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=PlacementTarget.IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
質問:マウスがターゲットから離れたときにポップアップが閉じるように、誰かがこれを調整するのを手伝ってくれますか?
編集:1
さて、これは一般的な問題のようですが、うまくいく解決策が見つかりませんでした。ホバーボタンを実装したいと考えています。ユーザーがポップアップの配置ターゲットである UI 要素の上にマウスを移動すると、コマンドのリストが表示されます。ボタンにポップアップを添付してこれを行うことができます。
私が必要とするのは、マウスが上にないときにポップアップを閉じることです。コード ビハインドを使用したいと考えていますが、mouseLeave
andisMouseOverChanged
イベントは、ユーザーがポップアップの外側をクリックしたときにのみ発生し、マウス ポインターがポップアップの真上から移動したときでは発生しません。IsOpen=False
また、MouseLeave
イベントで設定すると、ポップアップは再び開きません。こんなに難しいものだとは驚きです。
これにはカスタム コントロールを作成する必要があると思います。
編集2:
わかりやすくするためのスクリーンショットを次に示します。
ユーザーが「JOB MANAGEMENT」ボタンにカーソルを合わせたときにポップアップが開くようにします。次に、ユーザーがポップアップ コントロールのボタンの 1 つをクリックできるように、ユーザーがポップアップ自体の上にマウスを移動した場合、ポップアップを開いたままにしておきます。しかし、マウスがポップアップ自体またはJOB MANAGEMENTボタンの上にない場合は、ポップアップを閉じてください。
マウスがポップアップを離れたときにポップアップを強制的に閉じる方法について誰か考えがありますか? 私の理想的な解決策は、リソース ディクショナリのスタイル内で定義できるものです。
編集3:
isOpen
Marc の提案に従って、ラッピング コンテナーにバインドしようとして使用した XAML を次に示します。それは動かなかった:
<StackPanel x:Name="JobListPanel">
<Button x:Name="SubJobList" Content="JO_B MANAGEMENT" Style="{StaticResource NavChildButton}" />
<Popup x:Name="JobPopUp" PlacementTarget="{Binding ElementName=SubJobList}" Style="{StaticResource FTC_PopupStyle}" >
<Border Style="{StaticResource FTC_PopupBorder}" >
<WrapPanel Orientation="Vertical" >
<Button Content="Vie_w Jobs" Style="{StaticResource NavSubButton}" />
<Button Content="Add _New Job" Style="{StaticResource NavSubButton}" />
<Button Content="Job _Reports" Style="{StaticResource NavSubButton}" />
</WrapPanel>
</Border>
</Popup>
</StackPanel>
<Style x:Key="FTC_PopupStyle" TargetType="{x:Type Popup}">
<Setter Property="PopupAnimation" Value="Slide"/>
<Setter Property="AllowsTransparency" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsMouseOver, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>