WPF如何禁用DropShadowEffect

7

如果您知道自己正在运行远程会话,那么禁用DropShadowEffect的最佳方法是什么?

我能想到的方法有将颜色设置为透明,模糊半径设置为0或不透明度设置为零,但不确定这些选择是否有区别,或者是否有更好的解决方案。

2个回答

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>

非常好的例子,谢谢。我理解在GoToMyPC会话中会检测到硬件能力,对吗? - Dean
@Dean 抱歉,我没有使用过 GoToMyPC 和 RenderTierCapability,不过测试起来应该很容易! - erodewald
我的意思是在GoToMyPC上不会被检测到。但是,确实很容易测试。 - Dean

1

不必禁用DropShadowEffect,您可以将控件样式设置为根本不使用该效果。


我需要仅在远程会话中运行时禁用它。我们有一些用户使用 Citrix,而其他用户直接在他们的个人电脑上使用它。 - Dean
所以你可以有两种不同的样式。一种用于桌面用户,另一种用于 Citrix\RDP 用户。 然后,您需要在视图模型上设置一些标志、使用主题或使用 StyleSelectors,以确保为应用程序运行的上下文选择正确的样式。 - Steve
1
试图比重新设计更简单。如果透明颜色基本上从任何图形引擎处理中删除整个效果,那就没问题了。isEnabled会不错吧?!? - Dean
我想不出任何原因,将颜色设置为透明或调整模糊半径不起作用。 你也可以尝试将控件的效果设置为null,这样可以完全移除效果。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接