在XAML中,如何动态地将资源复制到不同的标记名称
本文关键字:复制 资源 XAML 何动态 动态 | 更新日期: 2023-09-27 18:24:09
我的问题几乎与这个问题相同:
如何将WPF资源分配给其他资源标签
除了这个问题只适用于静态资源。我想知道如何使用动态资源。详细信息:
我使用资源作为"类变量"来控制对象的颜色。所以我有这个:
<Style x:Key="CustomScrollBarStyle" TargetType="{x:Key ScrollBar}">
<Style.Resources>
<SolidColorBrush x:Key="HighlightColor" Color="Blue"/>
</Style.Resources>
<Setter Property="Template".../>
</Style>
每当我使用滚动条时,我都可以自定义颜色:
<ScrollBar>
<ScrollBar.Resources>
<SolidColorBrush x:Key="HighlightColor" Color="Yellow">/
</ScrollBar.Resources>
</ScrollBar>
如果我总是在{DynamicResource}中引用HighlightColor,这真的很好用。但我不知道如何把它提高一个层次。例如,我有一个组合框,它也有自己的颜色风格。我也想在滚动条上使用这种颜色:
<Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}">
<Style.Resources>
<SolidColorBrush x:Key="ComboBoxColor" Color="Black"/>
</Style.Resources>
...
<ControlTemplate>
<ScrollBar>
<SolidColorBrush x:Key="HighlightColor" ???? use ComboBoxColor/>
</ScrollBar>
</ControlTemplate>
...
</Style>
我尝试过使用绑定,但它给出了一个例外,即绑定源不能是DynamicResource。如果我作为StaticResource绑定到颜色,它只使用默认颜色。我也尝试过直接创建DynamicResource,但它抱怨只适用于依赖属性,不能直接插入到资源字典中。
那么,如何从现有资源中动态创建新资源呢?
谢谢。
更新看起来没有办法做到这一点。所以我决定只使用附加属性。它们工作得很好。
为什么不创建一个类似的颜色资源
<Color x:Key="KeyName">#112233</Color>
并将其设置为笔刷的值。
在您提供的代码中,您试图使用SolidColorBrush值设置"颜色属性"类型。
将资源添加到您的首页.resource(或Control.Resourcy)。然后,使用StaticResource访问它。
<Page.Resources>
<SolidColorBrush x:Key="HighlightColor" Color="Yellow">/
</Page.Resources>
<TextBlock Foreground="{StaticResource HighlightColor}"/>