值得註意的IsHitTestVisible

来源:http://www.cnblogs.com/tsliwei/archive/2016/09/30/5923107.html
-Advertisement-
Play Games

這個屬性我們平時可能並不怎麼用.先來看下MSDN上的解釋: 解釋的非常專業,然而我並沒有看懂. 說說我的理解吧:把這個屬性設置為false,看起來沒有變化,但操作上已經把他完全忽視了,不觸發事件,可以直接點到它下麵的東西. 這個屬性能方便的解決工作中常見的麻煩,比如下麵這個例子: 註意上面那部分.效 ...


這個屬性我們平時可能並不怎麼用.先來看下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         }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前段時間在開發一個協議站點供客戶端(Android/IOS)使用,因業務需要統計各協議的調用頻率。將記錄以日誌的形式記錄在日誌系統中。 簡單分析了一下,技術方案大致分為兩種: 方案A:每個業務模塊需要埋點的協議單獨埋點。 方案B:封裝一個HttpModule。記錄所有的請求。 方案A與方案B的優缺點... ...
  • 使用VS Code開發 調試.NET Core RC2應用程式,由於.NET Core 目前還處於預覽版。 本文使用微軟提供的示例進行開發及調試。 https://github.com/aspnet/cli-samples .NET Core 介紹及說明: https://github.com/do ...
  • 創建測試的過程可參考如下鏈接 http://www.cnblogs.com/libaoquan/p/5296384.html (一)如何使用VS2015查看測試結果 問題描述:使用VS2010執行單元測試,會出現如下測試結果視窗 VS2015只有如下結果 查找相關資料後,發現VS2010會自動生成此 ...
  • 軟體是服務組織的系統,而任何組織一定會涉及到許可權;所以許可權控制是一個系統的核心基礎,不管你做啥系統都逃不過:有人的地方就有江湖,有系統就有許可權管理。 今天我們繼續講一下組織機構的管理: 線上演示視頻 優酷視頻地址,手機無法播放的點擊這裡:http://v.youku.com/v_show/id_XM ...
  • 安裝完成後,在“控制面板”中啟動“添加刪除程式”,選中Vs2008,點擊“更改、刪除”,輸入序列號:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T ...
  • 本來沒打算單獨寫的,但是在自己弄測試小程式的時候,越寫發現不清楚的東西越多,所以實踐又一次證明:紙上得來終覺淺,絕知此事要躬行! 直接貼代碼了: 另外:祝大家國慶節快樂!我也要去參加一起長大的哥哥的婚禮了啊......時間啊,就是這麼匆匆溜走不回頭的....... ...
  • 引言 小弟工作過2家小作坊!項目經理使用的框架都是基於EF的Repository(倉儲)設計模式,我想說這種模式根本就是錯誤的使用! 更可怕的是博客園裡面也有很多這種教程! 之所以說錯誤的!是因為EF本身就是Repository(倉儲)的設計! 何必再套一層包裹給自己找事?而且也套的醜陋無比! 讓我 ...
  • VSCode,安裝插件:C# for Visual Studio Code (powered by OmniSharp),關於C#代碼的插件提示後,提示安裝DotNetCore.1.0.1 在安裝DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出現0x80072f8... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...