【问题标题】:Creating resource in WPF and binding its value to another resource在 WPF 中创建资源并将其值绑定到另一个资源
【发布时间】:2021-11-03 11:12:12
【问题描述】:

在 WPF 中,您可以创建新资源并将其值绑定到另一个资源,如果它像这样公开公共设置器:

<SolidColorBrush x:Key="PrimaryBrush">#000000</SolidColorBrush>
<SolidColorBrush x:Key="SecondaryBrush" Color="{Binding Color, Source={StaticResource PrimaryBrush}}"/> <!-- this works because SolidColorBrush exposes public Color prop -->

是否可以对不公开公共属性的类型执行相同的操作?例如:

<Duration x:Key="PrimaryDuration">00:00:01.500</Duration>
<Duration x:Key="SecondaryDuration">
  <Binding Source="{StaticResource PrimaryDuration}"/> <!-- The type 'Duration' does not support direct content -->
</Duration>

【问题讨论】:

  • 那是因为您传递 XAML 对象 Binding 而不是时间值。时长只能根据时间内容来构造,不能Binding
  • 为什么需要这样做?
  • 我想在 SecondaryDuration 上使用 ValueConverter,并在我的 ControlTemplate 中多次使用它。使用基于原始资源的派生静态资源,转换器只会执行一次。例如,使用 SolidColorBrush,我可以执行以下操作:&lt;SolidColorBrush x:Key="SecondaryBrush" Color="{Binding Color, Source={StaticResource PrimaryBrush}, Converter={StaticResource MakeOpaque}}"/&gt; 并在我的模板中重复使用 SecondaryBrush,而无需多次点击 MakeOpaque。

标签: c# .net wpf


【解决方案1】:

是否可以对不公开公共属性的类型执行相同的操作?

简短回答:不,这不是因为您只能绑定到像 Color 这样的依赖属性。

Duration 是一个不可变的值类型,必须使用 compile-time TimeSpan 值构造。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2022-07-28
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多