首页 文章

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

提问于
浏览
3

在我的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"创建样式并将样式应用于每个控件 . 更好......使集中样式和皮肤更易于管理,但仍需要大量标记,并且可能变得笨拙 .

  • 创建一个全局样式(即表达式覆盖此样式 . 这对于菜单,网格和其他使用文本块和文本框的控件这样做很糟糕 .

  • 创建一个以Grid为目标的样式,并明确设置dependecy propety值,如 <Setter Property="Frameworkelement.Margin" Value="3,1" /> 不错......它正确地将样式应用于其内容中的每个元素,但也将其直接应用于Grid本身......不完全是我的内容想 .

那么你采取什么方法?为什么?什么效果最好?

4 回答

  • 0

    您可以将"global"样式放入网格的 Resources 部分,从而限制其影响 . 要在不同位置重用"global"样式,请将它们放入非默认资源字典中并将其包含为 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>
    
  • 0

    您可以使用#4,但然后在Grid本身上显式覆盖这些属性 .

  • 0

    看一下这个 .

    http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution/

    我发现它们对LOB应用程序有很大的帮助 . 源代码可用,因此即使您不使用库,也可以了解如何进行全局样式设置 .

  • 5

    以下是我使用附加属性提出的解决方案:

    Coding Context Article

相关问题