gpt4 book ai didi

.net - 将样式应用于大量项目的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 12:02:00 25 4
gpt4 key购买 nike

在我的 LOB 应用程序中,我通常会使用包含大量不同文本 block 和文本框的容器来供用户输入数据。通常我需要对每个控件应用一定的边距或垂直/水平对齐。

假设我的表单上有如下所示的网格(为简洁起见,删除了很多标记):

<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"。有几种方法可以实现这一点:

  1. 直接在每个控件上设置属性 - 糟糕!!不允许换肤或集中样式。
  2. 使用 x:Key="MyStyleName"创建样式并将样式应用于每个控件。更好...使集中样式和皮肤更易于管理,但仍然需要大量标记,并且可能变得笨拙。
  3. 创建一个全局样式(即不指定 x:Key 并设置 TargetType={x:Type TextBox/TextBlock} - 不好!!这样做的问题是它会影响应用程序中不包含的所有控件不要显式覆盖此样式。这可能不利于菜单、网格和其他使用文本 block 和文本框的控件。
  4. 创建一个以网格为目标的样式,并明确设置依赖属性值,如 <Setter Property="Frameworkelement.Margin" Value="3,1" />不错……它正确地将样式应用于其内容中的每个元素,但也将它直接应用于网格本身……不完全是我想要的。

那么您采用什么方法,为什么?什么效果最好?

最佳答案

您可以将“全局”样式放入网格的 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>

关于.net - 将样式应用于大量项目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com