1. 程式人生 > >WPF 窗體在Alt+Tab中隱藏

WPF 窗體在Alt+Tab中隱藏

mode elements true block 管理器 子窗體 cti target eight

問題: 

近段時間由於項目上的需求,需要在WPF中使用COM組件,並且由於軟件界面設計等等原因,需要將部分控件顯示在COM組件之上,由於WindowsFormsHost的一些原因,導致繼承在WPF中的Winform控件或者COM組件總是置於頂層,覆蓋其他WPF元素。

  為了解決樣式布局問題,這裏我采用了父子窗體方式實現,使用定位方式將子窗體置於父窗體的合適位置:

  技術分享圖片

  這樣,解決了設計上的問題,但是新的問題隨之又來了:使用Alt+Tab、或者任務管理器等等可以在Taskbar中看到多個窗體縮略圖,如圖:

   技術分享圖片

  這樣十分的影響用戶體驗,並且軟件的其他窗口也可能被用戶關掉,降低軟件的用戶體驗。

如何解決: 

  我們只需要將需要隱藏Alt+Tab窗體的 ShowInTaskbar 屬性設置為 False 即可

<Window x:Class="Test.RevealModelFunctionMenu"
        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" mc:Ignorable="d" WindowStyle="None" BorderBrush="Transparent" BorderThickness="0" ShowInTaskbar="False" AllowsTransparency="True" Background="Transparent" Title="FunctionMenu" Height
="165" Width="420">

   來一張隱藏後的效果圖:

    技術分享圖片

PS:

 1. WindowsFormsHost is always the most top from WPF element  

    

According to MSDN (Layout Considerations for the WindowsFormsHost Element)

A hosted Windows Forms control is drawn in a separate HWND, so it is always drawn on top of WPF elements.

This is a design limitation

2. WindowsFormsHost 的布局註意事項

WPF 窗體在Alt+Tab中隱藏