【问题标题】:Trying to apply SolidColorBrush resource to HeaderedContentControl BorderBrush尝试将 SolidColorBrush 资源应用于 HeaderedContentControl BorderBrush
【发布时间】:2016-01-08 15:51:08
【问题描述】:

我想将我的窗口中的 SolidColorBrush 链接到我的字典中的另一个 SolidColorBrush。我没有找到类似的东西,可能是不可能的......

这是我的“ResourceDictionary.xaml”中的代码

<SolidColorBrush x:Key="BrushBlueTransparent" Color="#33006D8F"/>

在我的窗口中,我想要一个指向此资源的链接,如下所示:

<SolidColorBrush x:Key="ControlColor" Color="{Binding Source={DynamicResource BrushEvasanOrange}}"/>

目前,此代码不起作用...

我想使用这个链接,因为我想在我的页面中以多个“”使用这个资源,如果将来必须改变颜色,用这种方式很容易改变。

画笔资源是这样使用的:

<HeaderedContentControl 
    x:Name="_demandeur" 
    BorderBrush="{DynamicResource BrushEncadre}" 
    BorderThickness="1" 
    Padding="10" 
    Margin="0,20,0,0" 
    Header="{x:Static p:Resources.EV_Demandeur}"
    >
    <WrapPanel 
        Margin="0" 
        Orientation="Horizontal" 
        HorizontalAlignment="Left"
        >
        <TextBlock 
            TextWrapping="Wrap" 
            FontWeight="Normal" 
            Text="text"
            />
    </WrapPanel>
</HeaderedContentControl>

【问题讨论】:

  • 您的代码不起作用。为什么不将字典作为合并字典嵌入到您的 app.xaml 中。然后字典中的所有资源对您的应用都是全局的,您可以从任何其他 .xaml(窗口、页面、用户控件)中引用它们
  • 将颜色定义为资源:&lt;Color x:Key="MyBlue"&gt;#33006D8F&lt;/Color&gt; 然后将其用于两个画笔:&lt;SolidColorBrush x:Key="BrushBlueTransparent" Color="{StaticResource MyBlue}"/&gt;
  • @jure :感谢您的回答,但实际上我的“ResourceDictionary.xaml”已经是可以在每个xaml中使用的合并字典。我只想在 UserControl 中使用指向另一种颜色的链接来获取大量“HeaderedContentControl”,如果我必须更改所有这些“HeaderedContentControl”的颜色,我将很容易更改此链接。
  • @EdPlunkett:感谢您的回答,但它在我的解决方案中不起作用。我将您的代码示例用于“HeaderedContentControl/BorderBrush”,并且视图中没有颜色...这是个好主意,所以可能是我犯了错误,或者在这种情况下无法工作^^
  • @StefG 你能发布你试过的东西吗?有什么不好的地方?

标签: c# wpf xaml solidcolorbrush


【解决方案1】:

听起来你的问题是HeaderedContentControl 忽略了它的BorderBrush 属性。有两种方法可以解决这个问题:一种是将HeaderedContentControlTemplate替换为在内容周围显示边框的方法,但这很麻烦。另一种方法是使用HeaderedContentControl 的子类,它已经有一个你想要的模板(我们将在最后讨论)。

一个非常简单的选择是简单地将Border 放在控件周围,并将Margin 也移动到Border,这样橙色边框线将位于边距内。在您的具体情况下,这不是正确答案,但它是“如何在 XAML 中为事物设置边框?”的一个很好的一般答案。

<Border
    BorderBrush="{StaticResource BrushEncadre}" 
    BorderThickness="1" 
    Margin="0,20,0,0" 
    >
    <HeaderedContentControl 
        x:Name="_demandeur" 
        Padding="10" 
        Header="{x:Static p:Resources.EV_Demandeur}"
        >
        <WrapPanel 
            Margin="0" 
            Orientation="Horizontal" 
            HorizontalAlignment="Left" >
            <TextBlock 
                TextWrapping="Wrap" 
                FontWeight="Normal" 
                Text="text"
                />
        </WrapPanel>
    </HeaderedContentControl>
</Border>

但我想知道HeaderedContentControl 是否真的是您想要的。 HeaderedContentControl 是用于显示带有标题的内容的各种控件的基类。子类使用的要多得多,我感觉你这里真正想要的是GroupBox,就是那些子类之一。您可以像使用 HeaderedContentControl 一样使用它:

<GroupBox 
    x:Name="_demandeur" 
    Padding="10" 
    Margin="0,20,0,0" 
    Header="{x:Static p:Resources.EV_Demandeur}"
    BorderBrush="{StaticResource BrushEncadre}" 
    BorderThickness="1" 
    >
    <WrapPanel 
        Margin="0" 
        Orientation="Horizontal" 
        HorizontalAlignment="Left" >
        <TextBlock 
            TextWrapping="Wrap" 
            FontWeight="Normal" 
            Text="text"
            />
    </WrapPanel>
</GroupBox>

【讨论】:

  • 非常感谢 Ed Plunkett,它适用于 GroupBox,即使是我的风格 ^^ 我以前不知道 GroupBox,我唯一要做的就是用这个替换我的 HeaderedContentControl。谢谢你;D
  • @StefG 很高兴听到这个消息!
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2018-08-30
  • 1970-01-01
相关资源
最近更新 更多