Wpf 使用ContentControl上定义的本地资源

Wpf 使用ContentControl上定义的本地资源,wpf,Wpf,我有一个要在控件上使用的本地资源。我想直接在控件上定义资源,因为它是唯一要使用的地方 <Button Background="{StaticResource MyBrush}"> <Button.Resources> <SolidColorBrush x:Key="MyBrush" Color="#FFD71526"/> </Button.Resources> </Button> 这不起作用。设置背景时,MyBru

我有一个要在控件上使用的本地资源。我想直接在控件上定义资源,因为它是唯一要使用的地方

<Button Background="{StaticResource MyBrush}">
  <Button.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="#FFD71526"/>
  </Button.Resources>
</Button>

这不起作用。设置背景时,MyBrush尚未定义。它将作为一个DynamicSource工作,但我希望它保持静态

问题:如何使用直接在控件上定义的资源在控件上设置属性

我尝试在创建资源后设置属性,但如果可能的话,我似乎找不到正确的语法

<Button>
  <Button.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="#FFD71526"/>
  </Button.Resources>
  <Button.Background>
    {StaticResource MyBrush}
  </Button.Background>
</Button>

{StaticResource MyBrush}

如果您不想在其他任何地方使用该颜色,那么首先创建静态资源是没有意义的! 如果是一次性使用,只需将其直接放入属性中,如下所示:

<Button Background="#FFD71526">
</Button>

将颜色定义为静态ressource仅在具有计划重用该属性的多表子级的父级上才有意义

编辑: 您可以将其用于您的目的,设置一次背景,并将所有其他属性(例如BorderBrush)绑定到背景,如下所示:

<Button 
     Background="#FFD71526" 
     BorderBrush="{Binding RelativeSource={RelativeSource Self}, Path=Background}"  
     BorderThickness="5">
</Button>

正确的语法如下:

<Button>
  <Button.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="#FFD71526"/>
  </Button.Resources>
  <Button.Background>
    <StaticResource ResourceKey="MyBrush" />
  </Button.Background>
</Button>


您能详细说明一下为什么要这样做吗?这有点没有意义,可能是一个XY问题。要获得
按钮的正确
语法
,请尝试
。该按钮似乎将一个笔刷的颜色属性绑定到另一个笔刷的颜色属性。这意味着当只需要一个画笔时,实际上会创建两个画笔。正确,那么您主要关心的是资源使用情况?我主要关心的是理解。为什么
资源
必须是
静态资源
StaticResource
DynamicResource
之间的主要区别在于它们查找
资源的时间和方式(例如
StaticResource
与代码中的
static
不完全相同,更多详细信息请参见此处->)我想在按钮的多个属性上使用相同的资源,而不复制粘贴文字值。有更好的方法可以做到这一点,但我为您更新了我的答案!