Любой способ для всплывающей подсказки вызвать событие MouseEnter?

У меня есть элемент управления с всплывающей подсказкой. Я хочу, чтобы при наведении курсора на элемент управления и открытии всплывающей подсказки: если я затем ввожу всплывающую подсказку с помощью мыши, это вызовет событие mouseEnter, чтобы вызвать какое-то другое действие. Самое близкое, что я нашел для решения этой проблемы, - это добавить событие ToolTipClosing в элемент управления с помощью триггера... но это сработает, как только я покину элемент управления, даже если моя мышь не войдет во всплывающую подсказку. (Запуск события MouseEnter в самой всплывающей подсказке, похоже, вообще не срабатывает)

Вот пример: (где я хочу изменить фон границы, если я ввожу всплывающую подсказку)

XAML

<Border Height="300" Name="dummyBorder"
                        Width="200"
                        Background="Red" /> 
    <Label ToolTipService.InitialShowDelay="3000"
                           Content="Hover over here"
                           ToolTipService.ShowDuration="4000"
                           ToolTipService.Placement="Right"
                           ToolTipClosing="Label_ToolTipClosing"
                           Width="100"
                           HorizontalAlignment="Center"
                           Margin="10">
        <Label.ToolTip>
            <ToolTip Name="tt"  MouseEnter="ttBorder_MouseEnter">
                <Border Background="Brown"
                        Name="ttBorder"
                        MouseEnter="ttBorder_MouseEnter"
                        Width="100"
                        Height="50">
                    <TextBlock Text="This is a tool tip." />
                </Border>
            </ToolTip>
        </Label.ToolTip>
    </Label>

CodeBehind: (ни один из них не работает)

private void Label_ToolTipClosing(object sender, ToolTipEventArgs e)
{
    if (tt.IsMouseDirectlyOver)
    {
        dummyBorder.Background = Brushes.Aqua;
    }
}

private void ttBorder_MouseEnter(object sender, MouseEventArgs e)
{
    dummyBorder.Background = Brushes.Aqua;
}

Я специально хочу использовать всплывающую подсказку, а не всплывающее окно. Это возможно? Любая помощь будет оценена!


person Danield    schedule 08.12.2011    source источник


Ответы (2)


вы захотите попробовать что-то вроде этого:

<Window.CommandBindings>
<CommandBinding Command="ChangeColour" 
   CanExecute="ChangeCanExecute"
   Executed="ChangeExecuted" />
</Window.CommandBindings>

внутри вашего тега всплывающей подсказки:

<MouseBinding Gesture="LeftClick" Command="{Binding ChangeColour}"/>

затем в вашем коде:

private void ChangeCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
  e.CanExecute = true;
  e.Handled = true;
}

private void ChangeExecuted(object sender, ExecutedRoutedEventArgs e)
{
  dummyBorder.Background = Brushes.Aqua;
  e.Handled = true;
} 
person Emy    schedule 08.12.2011
comment
я не уверен на 100% в подключении команды в коде, так как я делаю все свои wpf с моделью mvvm. Этот способ дал какие-либо ошибки? - person Emy; 08.12.2011
comment
msdn.microsoft.com/en-us/library/ это хороший пример создания привязки с кодом позади. Надеюсь, это поможет! - person Emy; 08.12.2011

Ну (спустя 9 месяцев и без ответа) я думаю, что тогда никак. (Если не доказано обратное)

person Danield    schedule 09.09.2012
comment
MouseEnter не работает, так как IsHitTestable всегда имеет значение false для родительского всплывающего окна, в котором размещается всплывающая подсказка: referencesource.microsoft.com/#PresentationFramework/src/ Кроме того, всплывающие подсказки, по-видимому, не поддерживают StaysOpen = true, поэтому нет возможности изменить значение это свойство. Тоже бы понравилось :( - person floele; 22.05.2014