如何使用多个 StaticResources 在 XAML 中分配 属性 值

How can I assign property value in XAML using multiple StaticResources

MainWindow.xaml 中,我尝试使用两个 StaticResource 元素来定义网格中文本框的边框粗细。我似乎不能在 BorderThickness 规范中多次使用 StaticResource

有效的代码片段是,

xmlns:syw="clr-namespace:System.Windows;assembly=PresentationFramework"
<Window.Resources>
    <syw:Thickness x:Key="thick">5.0</syw:Thickness>
    <syw:Thickness x:Key="thin">1.0</syw:Thickness>
</Window.Resources>

定义行数和列数后,仍在<Grid>部分内,

<TextBox Name="c00" Grid.Row="1" Grid.Column="1" BorderBrush="Black" BorderThickness="{StaticResource ResourceKey=thick}"/>
<TextBox Name="c01" Grid.Row="2" Grid.Column="2" BorderBrush="Black" BorderThickness="5.0, 5.0, 1.0, 1.0"/>

此代码符合并显示两个 TextBox,第一个在 TextBox 的所有四个边上具有相同的边框厚度,第二个在左侧和顶部具有一个厚度,在右侧和底部具有第二个厚度文本框的。

我想做的是多次使用 StaticResource 代替上面第二行中的数字,因为我有很多文本框,并且希望能够通过更改 a 来更改边框粗细一对数字,即 thickthin。然而,当我尝试时,

<TextBox Name="c00" Grid.Row="1" Grid.Column="1" BorderBrush="Black"
         BorderThickness="{StaticResource ResourceKey=thick},{StaticResource ResourceKey=thick},{StaticResource ResourceKey=thin},{StaticResource ResourceKey=thin}"/>

编辑器指出逗号在那个位置是意外的,不会编译。

我只是格式不正确吗?

我想你想在这里做的是用你需要的参数定义一个厚度,如下所示:

<Window.Resources>
    <syw:Thickness x:Key="borderThickness">5.0, 5.0, 1.0, 1.0</syw:Thickness>
</Window.Resources>

您可以按如下方式使用它:

<TextBox BorderThickness="{StaticResource borderThickness}"/>

这应该会为您提供所需的行为。

申报额外资源

<sys:Double x:Key="dThick">5.0</sys:Double>
<sys:Double x:Key="dThin">1.0</sys:Double>

并使用标记语法和边框每一侧的双资源值设置粗细:

<TextBox.BorderThickness>
    <syw:Thickness Left="{StaticResource dThick}" Top="{StaticResource dThick}"
                   Right="{StaticResource dThin}" Bottom="{StaticResource dThin}"/>

</TextBox.BorderThickness>

BorderThickness="{StaticResource ResourceKey=thick}" 是标记扩展并且工作正常。

BorderThickness="5.0, 5.0, 1.0, 1.0" 之所以有效,是因为有关联的类型转换器可以将 string 以逗号分隔的数字转换为 Thickness

BorderThickness="{StaticResource ResourceKey=thick},{StaticResource ResourceKey=thick},{StaticResource ResourceKey=thin},{StaticResource ResourceKey=thin}" - xaml

不支持