Есть ли способ для всплывающей подсказки вызвать событие MouseEnter? - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть элемент управления с всплывающей подсказкой.Я хочу, чтобы при наведении курсора на элемент управления и всплывающую подсказку: если я затем введу всплывающую подсказку с помощью мыши, это вызовет событие 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;
}

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

Ответы [ 2 ]

0 голосов
/ 09 сентября 2012

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

0 голосов
/ 08 декабря 2011

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

<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;
} 
...