在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,但它抱怨只适用于依赖属性,不能直接插入到资源字典中。

那么,如何从现有资源中动态创建新资源呢?

谢谢。

更新看起来没有办法做到这一点。所以我决定只使用附加属性。它们工作得很好。

在XAML中,如何动态地将资源复制到不同的标记名称

为什么不创建一个类似的颜色资源

<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}"/>