我的WPF UserControl包含两个堆栈面板,每个面板包含标签,文本框和单选按钮
我想使用尽可能少的代码将VerticalAlignment
属性设置为Center
到我的UserControl中的所有控件。
现在我有以下解决方案:
VerticalAlignment="Center"
放在每个控件中FrameworkElement
定义一种样式并直接应用这三种解决方案需要太多代码
有没有其他方式来写这个?
我希望FrameworkElement
的定义样式会自动将属性设置为所有控件,但它不起作用。
这是我当前XAML的片段(我省略了第二个,非常相似的堆栈面板):
<UserControl.Resources>
<Style x:Key="BaseStyle" TargetType="FrameworkElement">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource BaseStyle}" Text="Value:" />
<RadioButton Style="{StaticResource BaseStyle}">Standard</RadioButton>
<RadioButton Style="{StaticResource BaseStyle}">Other</RadioButton>
<TextBox Style="{StaticResource BaseStyle}" Width="40"/>
</StackPanel>
</Grid>
修改
Re Will的评论:我真的很讨厌在代码隐藏中编写控件格式化代码的想法。 XAML应该足以实现这种非常简单的用户控制。
Re Muad'Dib的评论:我在用户控件中使用的控件来自FrameworkElement
,因此这不是问题。
答案 0 :(得分:10)
前一段时间我也遇到过同样的难题。不确定这是否是“最佳”方式,但通过定义基本样式然后为从基本样式继承的页面上的每个控件创建单独的样式,可以轻松管理:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="500" Height="300" Background="OrangeRed">
<Page.Resources>
<Style TargetType="FrameworkElement" x:Key="BaseStyle">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,5,0" />
</Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="RadioButton" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="TextBox" BasedOn="{StaticResource BaseStyle}" />
</Page.Resources>
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Value:" />
<RadioButton>Standard</RadioButton>
<RadioButton>Other</RadioButton>
<TextBox Width="75"/>
</StackPanel>
</Grid>
</Page>