值得註意的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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...