【问题标题】:Casting type right in XAML code?在 XAML 代码中正确转换类型?
【发布时间】:2013-07-25 11:32:37
【问题描述】:

我是 WPF 新手,我的问题是我想在 XAML 代码中将某些属性类型转换为另一个权限,如下所示:

//I want to cast Effect to DropShadowEffect to access it's ShadowDepth
<Trigger Property="IsPressed" Value="True">
   <Setter Property="Effect.ShadowDepth" Value="0.5"/>
</Trigger>

但是ShadowDepth是不可访问的,Effect应该先转换成DropShadowEffect。你能告诉我任何我可以在 XAML 代码中进行强制转换的解决方案吗?如果不可能,后面代码中的TypeConverter 就可以了。提前谢谢你。

【问题讨论】:

  • 您确定需要投射吗?我从来不需要在 XAML 中转换任何东西。您甚至可以编写 DataContext.MyProperty,即使 DataContext 是对象类型。您面临的错误是什么?或许this可以帮到你。
  • @dowhilefor 我认为实际上这并不是一个强制转换,我只需要一种访问Effect 属性的ShadowDepth 属性的方法。我的Button 具有分配有DropShadowEffect 实例的Effect 属性。我想在使用Trigger 按下按钮时更改ShadowDepth。如您所见,似乎没有办法给出Property 的正确路径。
  • @dowhilefor 你建议的链接给了我一个我目前使用的解决方案。如果DropShadowEffect 只关心ShadowDepth 属性并不重要,但它确实有更多的东西,并且重新创建一个与旧的ShadowDepth 不同的实例并不那么方便。如果有更简单的解决方案,我也可以应用到其他类型的Effect 比如BlurEffect...

标签: c# wpf xaml


【解决方案1】:

我看到了两种可能性:

  1. 在你的setter中重新创建DropShadowEffect,重新创建对象的Effect

  2. 为您的DropShadowEffect 命名,并使用TargetName 直接引用该对象:

    &lt;Setter TargetName="dropShadow" Property="ShadowDepth" Value="0.5" /&gt;

【讨论】:

  • 我使用了第一种方法,但不太方便。但是对于第二种方法,我们不能用Name="..." 命名DropShadowEffect,我们可以用x:Name="..." 命名它,但是解析器说它找不到我在可视树中给出的名称的任何元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
相关资源
最近更新 更多