2012-05-24 53 views
7

例如,如果您知道您正在遠程會話中運行,禁用DropShadowEffect的最佳方法是什麼?WPF如何禁用DropShadowEffect

我能想到的顏色透明,模糊半徑爲0,或不透明度設置爲零的,但不知道是否有在這些選擇任何區別,或者如果有一個更好的解決方案。

回答

10

Style triggers + RenderCapability Tiers是你需要的。稍微更友好的方式可以返回渲染層功能,但總體思路就在那裏。在使用終端服務時,或者沒有硬件效果的渲染功能時,可以使用樣式觸發器刪除效果。

<Style> 
    <Style.Triggers> 
    <Trigger Property="Perf:RenderCapabilityWrapper.Tier" Value="0"> 
     <Setter Property="Effect" Value="{x:Null}"/> 
    </Trigger> 
    <Trigger Property="Perf:RenderCapabilityWrapper.Tier" Value="1"> 
     <Setter Property="Effect" Value="{StaticResource performanceShadow}"/> 
    </Trigger> 
    <Trigger Property="Perf:RenderCapabilityWrapper.Tier" Value="2"> 
     <Setter Property="Effect" Value="{StaticResource qualityShadow}"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 
+0

很好的例子,謝謝。我認爲在GoToMyPC會話中會檢測到硬件功能,對吧? – Dean

+0

@Dean對不起,我沒有GoToMyPC和RenderTierCapability的任何個人經驗,應該很容易測試! – erodewald

+0

我的意思是說_不會在GoToMyPC上檢測到。但是,很容易測試。 – Dean

1

而不是禁用DropShadowEffect您可以設置控件的樣式,甚至不使用該效果。

+0

我需要禁用它僅在遠程會話中運行時。我們有一些使用Citrix的用戶,以及其他人在他們的PC上直接使用它。 – Dean

+0

所以你可以有2個獨立的風格。一種用於桌面用戶,另一種用於Citrix \ RDP用戶。 然後,您必須在視圖模型上使用某個標記,使用主題或使用StyleSelectors來確保爲應用程序運行的上下文選擇了正確的樣式。 – Steve

+1

試圖讓它比重新設置更簡單。如果透明顏色基本上消除了任何圖形引擎處理的整個效果,那就沒問題了。會不會很好?!?! – Dean