zoukankan      html  css  js  c++  java
  • 值得注意的IsHitTestVisible

    这个属性我们平时可能并不怎么用.先来看下MSDN上的解释:

    解释的非常专业,然而我并没有看懂.

    说说我的理解吧:把这个属性设置为false,看起来没有变化,但操作上已经把他完全忽视了,不触发事件,可以直接点到它下面的东西.

    这个属性能方便的解决工作中常见的麻烦,比如下面这个例子:

    注意上面那部分.效果很简单,就是个渐变的效果.但是这个渐变贯穿了两列,就使得处理起来有点小麻烦.

    当然解决方案有很多:

    可以写两个ListBoxItem的样式,第一个放顶部有渐变的背景,和右部保持一致,通过样式选择器来实现.这显然比较麻烦.

    还可以在大背景下放个渐变,ListBoxItem的上半部分做成透明,这样相对简单,但不一定能实现理想的效果.

    IsHitTestVisible属性就很好的解决了这个问题.直接在上层放个border,背景设置成渐变,IsHitTestVisible设置为false.这样就既能看到渐变效果,又能透过border,直接点到ListBoxItem.设置一个属性就解决了问题,非常方便.相当于在上面放了个蒙板,但是这个蒙板能看到却点不到.

    类似的我还想到了一个场景:

     

    这个效果顶层是个图片,IsHitTestVisible为false,透明为0.3.

    并不是图片是个背景,然后所有控件都是半透明效果.

    见代码:

     XMAL:

     1     <Grid>
     2         <Grid>
     3             <Grid.RowDefinitions>
     4                 <RowDefinition Height="70"></RowDefinition>
     5                 <RowDefinition></RowDefinition>
     6                 <RowDefinition Height="50"></RowDefinition>
     7             </Grid.RowDefinitions>
     8             <Border Background="#555F5F">
     9                 <Label Content="logo" Foreground="White"></Label>
    10             </Border>
    11             <Grid Grid.Row="1" Background="#AAAFAF">
    12                 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Button.Click="StackPanel_Click">
    13                     <Button Width="132" Height="32" Content="金闪闪" Margin="10"></Button>
    14                     <Button Width="132" Height="32" Content="小圆" Margin="10"></Button>
    15                 </StackPanel>
    16                 <Label Content="我不透明" Background="Green" Foreground="Blue" Width="100" Height="100" Margin="76,29,266,171"></Label>
    17                 <Label Content="我不透明" Background="Red" Foreground="Blue" Width="100" Height="40" Margin="112,40,230,220"></Label>
    18             </Grid>
    19             <Border Grid.Row="2" Background="#555F5F">
    20                 <Label Content="状态栏" Foreground="White"></Label>
    21             </Border>
    22         </Grid>
    23         <Image Name="img" HorizontalAlignment="Center" VerticalAlignment="Center" Width="0" Height="0" Source="/Image/jinshanshan.jpg" Stretch="Fill" Opacity="0.1" IsHitTestVisible="False"></Image>
    24     </Grid>

    后台:

     1        private void StackPanel_Click(object sender, RoutedEventArgs e)
     2         {
     3             Button btn = (Button)e.OriginalSource;
     4             string content = btn.Content.ToString();
     5             if (content == "金闪闪")
     6             {
     7                 img.Source = new BitmapImage(new Uri(@"/Image/jinshanshan.jpg", UriKind.Relative));
     8             }
     9             if (content == "小圆")
    10             {
    11                 img.Source = new BitmapImage(new Uri(@"/Image/xiaoyuan.jpg", UriKind.Relative));
    12             }
    13 
    14             DoubleAnimation daX = new DoubleAnimation();
    15             daX.From = 0;
    16             daX.To = 400;
    17             daX.FillBehavior = FillBehavior.HoldEnd;
    18             Storyboard.SetTarget(daX, img);
    19             Storyboard.SetTargetProperty(daX, new PropertyPath(Image.WidthProperty));
    20             DoubleAnimation daY = new DoubleAnimation();
    21             daY.From = 0;
    22             daY.To = 400;
    23             daY.FillBehavior = FillBehavior.HoldEnd;
    24             Storyboard.SetTarget(daY, img);
    25             Storyboard.SetTargetProperty(daY, new PropertyPath(Image.HeightProperty));
    26             DoubleAnimation daOp = new DoubleAnimation();
    27             daOp.From = 1;
    28             daOp.To = 0.3;
    29             daOp.FillBehavior = FillBehavior.HoldEnd;
    30             Storyboard.SetTarget(daOp, img);
    31             Storyboard.SetTargetProperty(daOp, new PropertyPath(Image.OpacityProperty));
    32 
    33             Storyboard sb = new Storyboard();
    34             sb.Children.Add(daX);
    35             sb.Children.Add(daY);
    36             sb.Children.Add(daOp);
    37             sb.Begin();
    38         }
  • 相关阅读:
    hibernate下载及配置超详细!
    如何新建一个jar包库?
    MySQL 之 索引原理与慢查询优化
    MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
    MySql之数据操作
    MySQL 之多表查询
    MySQL 简洁 数据操作 增删改查 记不住的 看这里把
    python 并发之多进程实现
    koa-static与react-create-app搭配的路径
    koa中返回404并且刷新后才正常的解决方案
  • 原文地址:https://www.cnblogs.com/tsliwei/p/5923107.html
Copyright © 2011-2022 走看看