0

我的问题几乎与这个相同:

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

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

谢谢。

更新 看起来没有办法做到这一点。所以我决定只使用附加属性。他们完美地工作。

4

2 回答 2

3

你为什么不创建一个这样的颜色资源

<Color x:Key="KeyName">#112233</Color>

并将其设置为画笔的值。

在您提供的代码中,您尝试使用 SolidColorBrush 值设置颜色类型的属性。

于 2013-07-19T18:58:14.097 回答
1

将资源添加到您的顶部 Page.Resource(或 Control.Resource)。然后,使用 StaticResource 访问它。

<Page.Resources>
    <SolidColorBrush x:Key="HighlightColor" Color="Yellow">/
</Page.Resources>

<TextBlock Foreground="{StaticResource HighlightColor}"/>
于 2013-07-19T18:08:12.980 回答