Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将样式应用于大量项目的最佳方法是什么?_.net_Wpf_Styles - Fatal编程技术网

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

.net 将样式应用于大量项目的最佳方法是什么?,.net,wpf,styles,.net,Wpf,Styles,在我的LOB应用程序中,我通常使用包含一堆不同文本块和文本框的容器,供用户输入数据。通常我需要对每个控件应用一定的边距或垂直/水平对齐 假设我的表单上有这样的网格(为了简洁起见,删除了很多标记): . ' 现在让我们假设我需要网格中包含的每个项目都有Margin=“3,1”VerticalContentAlignment=“Left”VerticalAlignment=“Center”。有几种方法可以实现这一点: 直接在每个控件上设置属性-错误!!不允许蒙皮或集中样式 使用x:Key=“My

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

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


.
'
现在让我们假设我需要网格中包含的每个项目都有Margin=“3,1”VerticalContentAlignment=“Left”VerticalAlignment=“Center”。有几种方法可以实现这一点:

  • 直接在每个控件上设置属性-错误!!不允许蒙皮或集中样式
  • 使用x:Key=“MyStyleName”创建一个样式,并将该样式应用于每个控件。更好…使集中样式和蒙皮更易于管理,但仍然需要大量标记,而且可能会变得笨拙
  • 创建一个全局样式(即,不要指定x:键并设置TargetType={x:Type TextBox/TextBlock}-BAD!!问题是它会影响应用程序中所有没有明确覆盖此样式的控件。这可能对菜单、网格和其他使用textblocks和TextBox的控件不好
  • 创建一个以网格为目标的样式,并明确设置依赖属性值,如
    不错…它正确地将样式应用于其内容中的每个元素,但也直接应用于网格本身…这不完全是我想要的
  • 那么,您采取什么方法以及为什么?什么方法最有效?

    您可以使用#4,但随后会显式覆盖网格本身上的这些属性。

    请查看此内容

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

    您可以将“全局”样式放入网格的
    资源部分,从而限制其影响。要重新使用“全局”将样式放在不同位置,将它们放入非默认资源字典中,并将其作为
    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>
    
    
    ...
    
    以下是我使用附加属性提出的解决方案:


    我曾经和卡尔一起工作。我和他讨论过这个解决方案,但即使是他也说他可能会采取不同的做法。
    <Grid>
       <Grid.ColumnDefinitions.../>
       <Grid.RowDefinitions.../>
    
        <Grid.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Styles.xaml" />
                </ResourceDictionary.MergedDictionaries>
    
                <!-- other resources here -->
    
            </ResourceDictionary>
        </Grid.Resources>
    
        ...
    </Grid>