如何从主目录更改自定义usercontrol dll的资源字典

时间:2019-02-22 15:18:10

标签: c# xaml resourcedictionary

我不知道要搜索什么,所以我决定在这里寻求帮助:
我有2个文件:'WatermarkBox.dll'是我自定义创建的用户控件,其资源字典中有4个Setters

<UserControl.Resources>

    <SolidColorBrush x:Key="brushWatermarkBackground" Color="White" />
    <SolidColorBrush x:Key="brushWatermarkForeground" Color="LightSteelBlue" />
    <SolidColorBrush x:Key="brushWatermarkBorder" Color="Indigo" />
    <SolidColorBrush x:Key="brushText" Color="Black" />

    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />

    <Style x:Key="EntryFieldStyle" TargetType="Grid" >
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="VerticalAlignment" Value="Stretch" />
        <Setter Property="Background" Value="{DynamicResource brushWatermarkBackground}" />
    </Style>

    <Style x:Key="BorderFieldStyle" TargetType="Border" >
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="VerticalAlignment" Value="Stretch" />
        <Setter x:Name="Borders" Property="BorderThickness" Value="1 1 1 1" />
        <Setter Property="BorderBrush" Value="{DynamicResource brushWatermarkBorder}" />
    </Style>

</UserControl.Resources>

这是可重用的.dll,我在多个程序中使用。
在另一个程序中,我需要将这些颜色更改为不同的值,但是我必须从另一个资源字典中的样式设置器中将其更改为一个名为'Dark.xaml'

的文件
<Style x:Key="TextBoxes" TargetType="common:WatermarkBox">
    <Setter Property="SOMETHING SOMETHING {SOMETHING}" Value="Black"/>
</Style>

我不知道如何在样式设置器中设置"brushWatermarkBackground"

预先感谢

编辑:添加了“ WatermarkBox.dll”的整个资源字典

编辑: 我声明了可以从其他项目访问的新依赖项属性

public static readonly DependencyProperty WatermarkBackColorProperty =
        DependencyProperty.Register("brushWatermarkBackground", typeof(SolidColorBrush), typeof(WatermarkBox));

public SolidColorBrush brushWatermarkBackground
{
    get { return (SolidColorBrush)GetValue(WatermarkBackColorProperty); }
    set { SetValue(WatermarkBackColorProperty, value); }
}

现在我有2个问题:
1.存在错误:“成员“ brushWatermarkBackground”无法识别或无法访问“-重新启动似乎可以解决此问题。
2.我已经将依赖项属性的名称更改为资源之一的名称,但是我知道它们没有关联,因此如何使用它来定义usercontorl中组件的颜色?

1 个答案:

答案 0 :(得分:0)

在评论中,我看到了有关资源字典和常规属性之间差异的评论,这意味着:
“资源字典” 是本地,无法从其他文件访问它,但不是“合并字典”,这不是我的意图。
要访问诸如颜色或文本之类的用户控制属性,必须将其定义为依赖项属性(以便可以直接从xaml中访问它)。

migrate

'WatermarkBox.xaml.cs'中定义属性后,我可以从其他xaml中访问它

public static readonly DependencyProperty WatermarkBackColorProperty =
        DependencyProperty.Register("WatermarkBackColor", typeof(SolidColorBrush),
            typeof(WatermarkBox), new PropertyMetadata(new SolidColorBrush(Colors.White)));
public SolidColorBrush WatermarkBackColor
{
    get { return (SolidColorBrush)GetValue(WatermarkBackColorProperty); }
    set { SetValue(WatermarkBackColorProperty, value); }
}

<Setter Property="WatermarkBackColor" Value="White" />

最终,我发现This回答了如何使用此属性的问题,这意味着现在一切正常。