将VerticalAlignment属性设置为所有控件

时间:2010-07-31 19:51:54

标签: wpf layout styles

我的WPF UserControl包含两个堆栈面板,每个面板包含标签,文本框和单选按钮 我想使用尽可能少的代码将VerticalAlignment属性设置为Center到我的UserControl中的所有控件。

现在我有以下解决方案:

  • 暴力 - 将VerticalAlignment="Center"放在每个控件中
  • FrameworkElement定义一种样式并直接应用
  • 为用户控件上的每种控件类型定义样式(这需要3个样式定义,但会自动将样式应用于控件)

这三种解决方案需要太多代码 有没有其他方式来写这个?
我希望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,因此这不是问题。

1 个答案:

答案 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>