本文链接: https://blog.csdn.net/lishuangquan1987/article/details/127686116
版权
在编写控件模板时,有时候使用Grid套一层TextBlock,要求鼠标移动到控件时,TextBlock的字体颜色变色。
这时候就有一个需求,如何让Grid相应鼠标事件。话不多说,上测试代码:
MainWindow.xaml:
<Window x:Class="GridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GridTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid Height="100" Width="100" MouseLeftButtonDown="Grid_MouseLeftButtonDown"></Grid>
</StackPanel>
</Window>
后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace GridTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("鼠标按下");
}
}
}
测试鼠标点击: 鼠标移动上去点击,发现没有触发Grid的MouseLeftButtonDown事件
当把Grid加上 Background="Gray" 时测试结果如下:

如何让Grid不可见,同时又能响应鼠标事件呢:
答案: Background="Transparent"
测试结果如下:

结论: 当不设置Grid的背景色时,Grid的背景色为 null,此时Grid不响应任何鼠标事件,当设置Grid的背景色为一个值(包含透明色)时,Grid就可以响应鼠标事件了
评论区