在我的LOB应用程序中,我通常会使用包含大量不同文本块和文本框的容器,以便用户输入数据。通常我需要对每个控件应用一定的边距或垂直/水平对齐。
假设我的表单上有Grid,看起来像这样(为简洁起见,很多标记都被删除了):
<Grid>
<Grid.ColumnDefinitions.../>
<Grid.RowDefinitions.../>
<TextBlock Text="MyLabel" />
<TextBox Text={Binding ...}/>
.
'
<!-- Repated a bunch more times along with all of the Grid.Row, Grid.Column definitions -->
</Grid>
现在假设我需要网格中包含的每个项目都有Margin =“3,1”VerticalContentAlignment =“Left”VerticalAlignment =“Center”。有几种方法可以实现这一目标:
<Setter Property="Frameworkelement.Margin" Value="3,1" />
不错......它正确地将样式应用于其内容中的每个元素,但也将其直接应用于Grid本身。 ..不完全是我想要的。那你采取什么方法?为什么?什么效果最好?
答案 0 :(得分:5)
您可以将“全局”样式放入网格的Resources
部分,从而限制其影响。要在不同位置重复使用“全局”样式,请将它们放入非默认资源字典并将其包含为MergedDictionary
:
Styles.xaml
中的:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="{x:Type ...}"> ... </Style>
</ResourceDictionary>
形式:
<Grid>
<Grid.ColumnDefinitions.../>
<Grid.RowDefinitions.../>
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- other resources here -->
</ResourceDictionary>
</Grid.Resources>
...
</Grid>
答案 1 :(得分:0)
您可以使用#4,但然后在Grid本身上显式覆盖这些属性。
答案 2 :(得分:0)
检查一下。
我发现它们对LOB应用程序有很大的帮助。源代码可用,因此即使您不使用库,也可以了解如何进行全局样式设置。
答案 3 :(得分:0)
这是我使用附加属性提出的解决方案: