gpt4 book ai didi

c# - WPF MouseDown 事件不会在控件中的任何地方触发

转载 作者:IT王子 更新时间:2023-10-29 04:42:39 34 4
gpt4 key购买 nike

我目前正在与另一个 WPF 斗争作斗争,即鼠标事件。

我基本上有一个非常简单的控件(一个包含 GridBorder,它本身有一些 TextBlocks)。我试图实现一个简单的行为:双击应该将控件转换为编辑模式(这实际上隐藏了 TextBlocksTextBoxes 绑定(bind)到相同的数据。

没什么特别的,对吧?好吧,我还在挣扎。链接到我的 UserControlMouseDoubleClick 仅在我单击控件时触发(例如,单击 TextBlock)。如果我单击 TextBlocks 之间的空白区域,则不会触发任何内容。甚至 MouseDown 也没有。

我怎样才能让它工作以捕捉每一次鼠标点击?我假设将 MouseDown 事件链接到 Border 应该捕获边框上的每次点击,但是......它最终没有捕获边框空白部分的点击。

这是我为您编写的一些草稿代码:

XAML:

<StackPanel Orientation="Vertical">
<Border Height="400" Width="400" HorizontalAlignment="Center" VerticalAlignment="Center" BorderBrush="Black" BorderThickness="2"
MouseDown="Border_MouseDown" MouseUp="Border_mouseUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>

<TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

</Border>

<TextBlock Height="100" Width="300" HorizontalAlignment="Center" TextAlignment="Center" x:Name="thetext" Visibility="Collapsed"
Foreground="White" Background="Red" Text="CLICKED!" />
</StackPanel>

代码隐藏:

private void Border_MouseDown(object sender, MouseButtonEventArgs e)
{
thetext.Visibility = Visibility.Visible;
}

private void Border_mouseUp(object sender, MouseButtonEventArgs e)
{
thetext.Visibility = Visibility.Collapsed;
}

现在尝试单击其中一个“BLUFF”文本:将出现“CLICKED”文本。尝试单击 TextBlock 之间的其他位置:没有任何反应。

谢谢!

最佳答案

<StackPanel Background="Transparent" ... >

<Border Background="Transparent" ... >

应该做的伎俩...

这使得网格透明,但是对于鼠标点击是可见的。

here形成更多信息。

还有一些其他情况,你必须使用 PreviewXXX- 事件,这是当子元素“吞噬”事件时,但在你的情况下,上面应该是你正在寻找。

关于c# - WPF MouseDown 事件不会在控件中的任何地方触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781031/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com