WPF属性笔记系列
第一章 【WPF属性笔记】【IsHitTestVisible】
前言
关于WPF属性IsHitTestVisible的学习笔记。
一、IsHitTestVisble介绍
- UIElement.IsHitTestVisble属性:获取或设置一个值,该值声明此元素是否可以作为其呈现内容的某部分的命中测试结果返回。这是一个依赖属性。
- IsHitTestVisble属性值默认为true
- 通过设置IsHitTestVisble属性值为false,可以使界面元素不响应鼠标,鼠标事件也不会被触发
- 通过设置IsHitTestVisble属性值为false,可以禁止所有的鼠标交互,包括控件的点击、通过鼠标点击给控件设置输入焦点等等,都是不起作用的
- 通过设置IsHitTestVisble属性值为false,虽然鼠标被禁止了,但是通过tab键设置焦点,再使用空格键或者Enter键触发,是正常响应的
- 如果一个容器设置IsHitTestVisble属性值为false,那么这个容器内所有的子控件都不响应鼠标,即时是子空间设置IsHitTestVisble为true也没用
二、IsHitTestVisble的使用
设置IsHitTestVisble=false,checkbox不再能被命中,且点击它相当于点击它下面的那一层控件,即button,如以下代码,点击checkbox1,能看到✔的有无变化,且触发checkbox1的点击事件,但是点击checkbox2时,✔无变化,且不触发checkbox2的点击事件,反而触发底下一层控件button的点击事件;但是要注意的是,如果不是使用鼠标点击,而是使用tab键切换焦点,使用空格键或enter确认点击,这时候就无区别了。
<Grid>
<Button Content="button" Click="Button_Click"/>
<StackPanel>
<WrapPanel>
<CheckBox IsChecked="True" IsHitTestVisible="True" Click="CheckBox1_Click"/>
<Button Content="button1" Width="100" Click="Button1_Click"/>
</WrapPanel>
<WrapPanel>
<CheckBox IsChecked="True" IsHitTestVisible="false" Click="CheckBox2_Click"/>
<Button Content="button2" Width="100" Click="Button2_Click"/>
</WrapPanel>
</StackPanel>
</Grid>
private void CheckBox1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("CheckBox1");
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button1");
}
private void CheckBox2_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("CheckBox2");
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button2");
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button");
}
三、应用场景
- 基础的使用可以实现是否屏蔽指定控件的鼠标交互;
- 实现渐变色的处理,如在控件上层加上有渐变效果的border,设置IsHitTestVisble为false,即不影响底层控件的鼠标事件,又能简单实现渐变效果
- 实现图像的无遮挡显示,图像显示在最上层,设置IsHitTestVisble为false,这样图像能全部显示出来(放在底层会被上层的控件遮挡部分),底层控件也能正常控制;
总结
不积硅步,何以至千里