WPF ToolTip исчезает при наведении мыши - PullRequest
8 голосов
/ 11 марта 2010

У меня есть всплывающая подсказка для элемента, который я хочу оставить открытым даже тогда, когда пользователь нажимает или удерживает кнопку мыши, когда он находится над моим элементом.

Есть ли в любом случае, чтобы сделать это?

Ответы [ 2 ]

8 голосов
/ 11 марта 2010

Существует свойство всплывающей подсказки StaysOpen, но согласно этой книге вам лучше использовать всплывающий элемент управления (просто сделайте его похожим на подсказку).

Вот цитата из книги:

Не имеет никакого эффекта на практике. целевое назначение этого имущества чтобы позволить вам создать всплывающую подсказку, которая остается открытым, пока пользователь не нажмет где-нибудь еще. Тем не менее Свойство ToolTipService.ShowDuration переопределяет свойство StaysOpen. Как результат, подсказки всегда исчезают после настраиваемого промежутка времени (обычно около 5 секунд) или когда пользователь убирает мышь Если ты хочешь создать окно, похожее на всплывающую подсказку, остается открытым до бесконечности, самый простой подход заключается в использовании всплывающего элемента управления.

2 голосов
/ 10 апреля 2015

Самый простой способ - использовать Popup. Посмотрите на пример кода.

<!--Your ToolTip-->
<Popup x:Name="InfoPopup" PlacementTarget="{Binding ElementName=yourElement}" AllowsTransparency="True" StaysOpen="False" Placement="Mouse" PopupAnimation="Fade">
    <Border BorderBrush="White" BorderThickness="1" Background="#FFFFFFFF" >
        <Label Content="Your text here" />
    </Border>
</Popup>

<!--Your element. Border, Button etc..-->
<Border x:Name="yourElement" Background="#FFFFFF" MinWidth="20" Height="20">
    <Border.Triggers>
        <EventTrigger RoutedEvent="Mouse.MouseDown">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Duration="0:0:0:0" Storyboard.TargetProperty="IsOpen" Storyboard.TargetName="InfoPopup">
                        <DiscreteBooleanKeyFrame Value="True"></DiscreteBooleanKeyFrame>
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>

        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseUp">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames Duration="0:0:0:0" Storyboard.TargetProperty="IsOpen" Storyboard.TargetName="InfoPopup">
                        <DiscreteBooleanKeyFrame Value="False"></DiscreteBooleanKeyFrame>
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Border.Triggers>
</Border>
...