WPF事件隧道

时间:2010-12-30 08:54:25

标签: wpf

请考虑以下代码:

<Window x:Class="WpfApplicationWPF.CommandsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CommandsWindow" Height="300" Width="300" PreviewMouseUp="Window_PreviewMouseUp" MouseUp="Window_MouseUp" >
    <StackPanel Name="StackPanelNew"  Background="Beige" PreviewMouseUp="Window_PreviewMouseUp" MouseUp="Window_MouseUp">
        <Button Name="BTNNew"  VerticalAlignment="Center" PreviewMouseUp="Window_PreviewMouseUp" MouseUp="Window_MouseUp">
            <Label Name="LabelNew"  BorderBrush="Red" BorderThickness="4" PreviewMouseUp="Window_PreviewMouseUp" MouseUp="Window_MouseUp">
                <TextBox PreviewMouseUp="Window_PreviewMouseUp" MouseUp="Window_MouseUp">HELLO</TextBox>
            </Label>
        </Button>
    </StackPanel>
</Window>

当我点击标签时,它的previewkeyup不会触发标签,但是当我点击文本框时,它会触发从Window到文本框(包括标签)的所有控件。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

理由,在我自己的想法中

这是因为,无法确定是否通过标签点击或按钮点击来启动鼠标,尝试右键单击标签。

答案 1 :(得分:1)

不,从一开始它似乎很复杂,但事实并非如此。

对您的情况的说明非常简单:当您左键单击Buttoncaptures mouse输入并阻止通过子树进一步传播事件时。单击TextBox(没有人在此处捕获鼠标)时并非如此。