C# 如何为整个网格捕获事件
我有一个网格,它占据了接口的四分之一。我想在任何人使用此网格(或界面的四分之一)单击任何位置时捕获事件。我创建了一个stackpanel,并设置了PreviewMouseDown按钮,但当我单击网格空间中的任何位置时,它不会捕获事件。我做错了什么C# 如何为整个网格捕获事件,c#,wpf,C#,Wpf,我有一个网格,它占据了接口的四分之一。我想在任何人使用此网格(或界面的四分之一)单击任何位置时捕获事件。我创建了一个stackpanel,并设置了PreviewMouseDown按钮,但当我单击网格空间中的任何位置时,它不会捕获事件。我做错了什么 <Grid > <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefi
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.RowSpan="3"
Name="sp_activationSpace"
PreviewMouseDown="testing"></StackPanel>
......
......
我不知道窗口的其余部分是什么样子,但我通常做的是在网格下创建一个背景通常为白色的矩形(我不认为它是透明的,但我不确定),我想捕获鼠标按钮下的或预览鼠标下的。它可能是这样的:
<Grid>
<Rectangle PreviewMouseDown="MyGrid_PreviewMouseDown" Margin="0"/>
<Grid>
<!--your grid-->
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.RowSpan="3"
Name="sp_activationSpace"
PreviewMouseDown="testing"></StackPanel>
......
</Grid>
</Grid>
......
同样,这是一个简单且功能良好的解决方案,但是如果您需要透明度,它可能不适合。我怀疑您只有一个白色(或任何纯色)窗口背景。尝试将PreviewMouseDown=“testing”移动到网格中,而不是像堆栈面板一样移动到网格中。当我这样做时,我可以单击网格中的按钮或标签,然后捕获事件。但如果我点击空白,它将不会被捕获。我希望它捕获我在网格中的任何单击。请尝试在事件处理程序中检查原始源的类型。矩形不起作用,但空白标签起作用。够近了。工作起来很有魅力。谢谢