0

複数の TabItems を持つ TabControl があり、各 TabItem にはコンテンツ領域に複数のセクションが含まれています。ユーザーが任意のタブにカーソルを合わせると、そのタブ内のセクションのリストを表示するポップアップを表示し、ユーザーがセクションをクリックしてそこに移動できるようにしたいと考えています。

この質問に関して、私が助けを必要としている部分は、ユーザーが各タブにカーソルを合わせたときのポップアップの開閉です。主な問題点は次のとおりです。

  1. ユーザーがカーソルをタブからポップアップ領域に移動できるようにします。Popup が開かれると、TabItem MouseLeave で閉じることを拒否します。
  2. ユーザーがタブからタブに移動すると、前のタブのポップアップが閉じて、新しいタブが開きます。
  3. ユーザーは 1 回クリックするだけでナビゲートできます。これは、別のポップアップを表示するために、あるタブからポップアップを「クリックして離す」必要がないことを意味します。

私の考えは、マウスが置かれているタブのテストをヒットし、そこからポップアップをトリガーする DependencyProperty を公開することです。

わかりやすくするために編集: マウスをタブの上に移動すると、ポップアップが表示されます。マウスをタブから離すと、ポップアップが閉じます。ユーザーがポップアップ内のコンテンツをクリックできるようにする必要があるため、ポップアップである必要があります (ツールチップではありません)。

TabControl をサブクラス化し、再テンプレート化しましたが、MouseLeave イベントで Popup を閉じる方法を教えてください。MouseLeave イベントでトリガーしましたが、Popup が開くとフォーカスが Popup に移動するため、TabItem の MouseLeave イベントが正しく発生しません。

4

1 に答える 1

0

Blend SDKの を使用してInteraction.Triggers、マウスがポップアップから離れるたびにポップアップを閉じるようにトリガーできます。以下に短い例を示します。

<Popup Height="300" x:Name="MyPopup">
        <Label Content="MyLabel"></Label>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeave">
                <ei:ChangePropertyAction TargetObject="{Binding ElementName=MyPopup}" PropertyName="IsOpen" Value="False"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
</Popup>

次の名前空間が必要です。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"                  
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
于 2013-02-04T14:39:03.713 に答える