我目前正在与WPF的另一项斗争作斗争,即鼠标事件。
我基本上有一个非常简单的控件(一个Border
包含,Grid
而它本身具有一些TextBlocks
)。我想实现一个简单的行为:双击应该把控制进入编辑模式(这实际上皮张TextBlocks
与TextBoxes
绑定到相同的数据。
没什么好看的,对吧?好吧,我在挣扎。该MouseDoubleClick
链接到我UserControl
时,我在控制点击(如,点击一个公正的火灾TextBlock
)。如果单击之间的空白TextBlocks
,则不会触发任何内容。甚至没有MouseDown
。
我如何使其工作以捕捉每次鼠标单击?我以为将MouseDown
事件链接到aBorder
应该会抓住边框上的每一次点击,但是...最终却无法捕捉到边框上空白的点击。
这是我为您运行的一些草稿代码:
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”文本。尝试单击TextBlocks之间的其他位置:没有任何反应。
谢谢!
<StackPanel Background="Transparent" ... >
要么
<Border Background="Transparent" ... >
应该做到这一点...
这使网格透明,但是对于鼠标单击可见。
看看这里形成更多的信息。
在其他情况下,您必须使用PreviewXXX
-事件,这是子元素“吞食”事件的时候,但是在您的情况下,上面的内容正是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句