如何使用多个 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 来更改边框粗细一对数字,即 thick
和 thin
。然而,当我尝试时,
<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
不支持
在 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 来更改边框粗细一对数字,即 thick
和 thin
。然而,当我尝试时,
<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