ToolTip的任何方式都可以触发MouseEnter事件?

时间:2011-12-08 10:14:35

标签: wpf tooltip 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;
}

我特别想使用工具提示而不是弹出窗口。这可能吗? 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

你会想尝试这样的事情:

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

答案 1 :(得分:0)

嗯(9个月后没有回答)我想那时候没办法了。 (除非另有证明)