0

我有一个带有多个 TabItems 的 TabControl,每个 TabItem 在内容区域中包含多个部分。当用户将鼠标悬停在任何选项卡上时,我想显示一个弹出窗口,显示该选项卡中的部分列表,并允许用户单击该部分并导航到它。

对于这个问题,我需要帮助的部分是当用户将鼠标悬停在每个选项卡上时弹出窗口的关闭/打开。主要的难点是:

  1. 允许用户将光标从选项卡移动到弹出区域。打开弹出窗口后,它拒绝在 TabItem MouseLeave 上关闭。
  2. 如果用户从一个选项卡移动到另一个选项卡,前一个选项卡的弹出窗口应该关闭并打开一个新选项卡。
  3. 用户只需单击一下即可导航。这意味着他们不必为了显示另一个弹出窗口而从一个选项卡中“单击”弹出窗口。

我的想法是公开一个 DependencyProperty 来测试鼠标在哪个 Tab 上,然后触发 Popup。

为清楚起见进行了编辑:将鼠标移到选项卡上时,我会显示一个弹出窗口。当我将鼠标从选项卡上移开时,我希望弹出窗口关闭。它必须是一个弹出窗口(而不是工具提示),因为用户必须能够点击弹出窗口中的内容。

我已经对 TabControl 进行了子类化和重新模板化,但我想要一些关于如何在 MouseLeave 事件上关闭 Popup 的帮助。我已经触发了 MouseLeave 事件,但是当 Popup 打开时,焦点转移到了 Popup,因此 TabItem MouseLeave 事件没有被正确触发。

4

1 回答 1

0

Interaction.Triggers当鼠标离开弹出窗口时,您可以使用Blend SDK中的触发弹出窗口关闭。这是一个简短的例子:

<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 回答