单一样式中的WPF分组格式

时间:2018-06-19 22:45:12

标签: c# wpf xaml formatting

我正在开发WPF应用程序,到目前为止,我有很多不同的资源字典,其中包含大量样式。其中许多样式描述了边框,背景等的笔刷设置。到目前为止,每种格式都采用单独的样式。

但是,我想做的是(如果可能的话)是将归为“父”样式的不同样式“分组”,从而使哪种样式与哪些控件有关,从而使其更易于管理。

例如,对于GroupBox,理想情况下,设置将以以下样式注册:

<Style x:Key="GroupBoxFormat">
    <Style.Resources>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" x:Key="ElementGradientBrush">
            <GradientStop Color="AntiqueWhite" Offset="0" />
            <GradientStop Color="Tan" Offset=".7" />
        </LinearGradientBrush>

        <Border x:Key="BorderFormat" BorderThickness="2">
            <Border.Background>
                <SolidColorBrush Color="Gold"></SolidColorBrush>
            </Border.Background>
            <Border.BorderBrush>
                <SolidColorBrush Color="Black" ></SolidColorBrush>
            </Border.BorderBrush>
        </Border>

        <FontFamily x:Key="TitleFontFamily">
            Arial
        </FontFamily>

        <FontWeight x:Key="TitleFontWeight">
            Bold
        </FontWeight>

        <!-- Other formats go here... -->

    </Style.Resources>
</Style>

如清单所示,该样式内的所有单独资源都指定了x:Key属性。由于这似乎是必需的(如VS抱怨缺少它),显然必须有一个原因。

在XAML代码的其他地方,可以使用{StaticResource GroupBoxFormat}引用样式。但是,如果我想从外部引用任何“内部”属性,请说“ BorderFormat”-我该怎么做? C#中类似“点”符号的东西,用于访问诸如SomeObject.SomeMember的对象成员。停留在示例中,它可以像“ GroupBoxFormat.BorderFormat”所示。我只需要这样做的“ XAML”方式即可。

1 个答案:

答案 0 :(得分:0)

“ C#中的点符号”与您所要求的不一样。我唯一可以建议的是在App.xaml中定义全局样式,而不定义Key,而是定义TargetType:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Margin" Value="3"/>
    <Setter Property="MinWidth" Value="110"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
 </Style>

现在,所有TextBox控件都将定义这些属性。如果您希望特定的TextBox具有不同的样式,则必须定义另一种TextBox样式,但是设​​置x:Key属性以及TargetType,然后引用Key。

<TextBox Style{StaticResource YourKey}/>