C# 为什么MouseDown事件处理程序没有被命中?

C# 为什么MouseDown事件处理程序没有被命中?,c#,wpf,xaml,C#,Wpf,Xaml,我在WPF中有一个非常简单的按钮,它应该在MouseDown上调用函数preview(),在MouseUp上调用函数hide()。但是它不工作,甚至没有点击它的事件处理程序。我犯了什么错 我试着改变背景属性,没有用。MouseLeave和MouseClick都能工作,但那不是我想要的 XAML: 某些控件在内部处理输入事件,在这些情况下,通常可以使用事件的隧道版本(Preview*)。请参阅。某些控件在内部处理输入事件,在这些情况下,通常可以使用事件的隧道版本(预览*)。请参阅。处理Previe

我在WPF中有一个非常简单的按钮,它应该在MouseDown上调用函数
preview()
,在MouseUp上调用函数
hide()
。但是它不工作,甚至没有点击它的事件处理程序。我犯了什么错

我试着改变背景属性,没有用。MouseLeave和MouseClick都能工作,但那不是我想要的

XAML:


某些控件在内部处理输入事件,在这些情况下,通常可以使用事件的隧道版本(
Preview*
)。请参阅。

某些控件在内部处理输入事件,在这些情况下,通常可以使用事件的隧道版本(
预览*
)。请参阅。

处理PreviewMouseDown而不是MouseDown事件,PreviewMouseUp而不是MouseUp等等。它应该对你有用

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" PreviewMouseDown="previewButton_MouseDown" MouseDown="previewButton_MouseDown" PreviewMouseUp="" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" >
            <StackPanel Height="98" Width="49">
                <Image x:Name="Image1" Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" />
                <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/>
            </StackPanel>
        </Button>


所有框架元素都公开这些事件。所有“预览…”事件都是“隧道”事件,而其他鼠标事件是“气泡”事件。隧道事件首先在更高级别的元素上引发,例如,如果将鼠标悬停在按钮元素上,则第一个预览鼠标事件将进入窗口,然后向下遍历其所有子体,直到到达最终目标(在本例中为按钮)。然后,正常的,即“非预览”鼠标事件从那里开始冒泡,直到到达窗口。在该链的任何位置,事件处理程序都可以将事件标记为已处理并停止进程。这里,MouseDown冒泡事件由放置在按钮内的文本块处理。

HandlePreviewMouseDown代替MouseDown事件,PreviewMouseUp代替MouseUp等等。它应该对你有用

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" PreviewMouseDown="previewButton_MouseDown" MouseDown="previewButton_MouseDown" PreviewMouseUp="" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" >
            <StackPanel Height="98" Width="49">
                <Image x:Name="Image1" Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" />
                <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/>
            </StackPanel>
        </Button>


所有框架元素都公开这些事件。所有“预览…”事件都是“隧道”事件,而其他鼠标事件是“气泡”事件。隧道事件首先在更高级别的元素上引发,例如,如果将鼠标悬停在按钮元素上,则第一个预览鼠标事件将进入窗口,然后向下遍历其所有子体,直到到达最终目标(在本例中为按钮)。然后,正常的,即“非预览”鼠标事件从那里开始冒泡,直到到达窗口。在该链的任何位置,事件处理程序都可以将事件标记为已处理并停止进程。此处,鼠标向下冒泡事件由按钮内的文本块处理。

您是否尝试了PreviewMouseDown事件?@bob否我没有。那是什么?你有没有尝试PreviewMouseDown事件?@bob没有。那是什么?
<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" PreviewMouseDown="previewButton_MouseDown" MouseDown="previewButton_MouseDown" PreviewMouseUp="" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" >
            <StackPanel Height="98" Width="49">
                <Image x:Name="Image1" Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" />
                <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/>
            </StackPanel>
        </Button>