在我的 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"。有几种方法可以实现这一点:
- 直接在每个控件上设置属性 - 糟糕!不允许蒙皮或集中样式。
- 使用 x:Key="MyStyleName" 创建一个样式并将该样式应用于每个控件。更好...使集中样式和蒙皮更易于管理,但仍需要大量标记,并且可能变得笨拙。
- 创建全局样式(即不指定 x:Key 并设置 TargetType={x:Type TextBox/TextBlock} - 不好!!这样做的问题是它会影响应用程序中未明确覆盖的所有控件这种风格。这对于菜单、网格和其他使用文本块和文本框的控件可能很糟糕。
- 创建一个以 Grid 为目标的样式,并明确设置依赖属性值,例如
<Setter Property="Frameworkelement.Margin" Value="3,1" />
Not bad...它将样式正确应用于其内容中的每个元素,但也将其直接应用于 Grid 本身...不完全是我想要的。
那么你采取什么方法,为什么?什么效果最好?