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
不完全相同,更多详细信息请参见此处->)我想在按钮的多个属性上使用相同的资源,而不复制粘贴文字值。有更好的方法可以做到这一点,但我为您更新了我的答案!