【问题标题】:how to capture an event for an entire grid如何捕获整个网格的事件
【发布时间】:2018-03-15 18:45:51
【问题描述】:

我有一个占界面四分之一的网格。每当有人使用此网格(或界面的四分之一)单击任何位置时,我都想捕获一个事件。我创建了一个堆栈面板,并设置了 PreviewMouseDown 按钮,但是当我单击网格空间内的任何位置时,它没有捕获事件。我在这里做错了什么?

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

             ......

【问题讨论】:

  • 尝试将 PreviewMouseDown="testing" 移动到网格而不是像 的堆栈面板。
  • 当我这样做时,我可以单击网格内的按钮或标签,然后捕获事件。但是如果我单击空白区域,它将不会捕获。我希望它捕捉我在网格中所做的任何点击。
  • 尝试在您的事件处理程序中检查 OriginalSource 的类型。

标签: c# wpf


【解决方案1】:

我不知道窗口的其余部分是什么样子,但我通常做的是创建一个通常为白色背景的Rectangle(我认为它不能是透明的,但我不确定)那是在Grid 下我想捕获MouseButtonDownPreviewMouseDown。它可能看起来像这样:

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

同样,这是一个简单且运行良好的解决方案,但如果您需要透明度,它可能不适合。我怀疑您只有白色(或任何纯色)窗口背景。

【讨论】:

  • 矩形无效,但空白标签有效。足够近。奇迹般有效。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2014-10-09
相关资源
最近更新 更多