我正在开发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”方式即可。
答案 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}/>