2010-03-08 75 views
2

我想嵌套容器继承该属性,但是当我将它设置在最外层的容器中时,我不确定它是否工作。它要么正在工作,但我没有得到我想要的结果,或者我不得不在某个地方设置一个属性,以便它随身携带。WPF:VerticalAlignment是否由嵌套容器继承?

假设a)有可能做到这一点,b)我不得不在某处改变一个属性,会有什么副作用我应该知道吗?

编辑

好吧,这里是一个例子:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Width="300" Height="100"> 
    <Grid ShowGridLines="True"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Row="0" Grid.Column="0">Text</Label> 
     <TextBox Grid.Row="0" Grid.Column="1">I'm on the Internet</TextBox> 
     <Button Grid.Row="0" Grid.Column="2">Don't click me</Button> 
     <Label Grid.Row="1" Grid.Column="0">Text2</Label> 
     <Slider Grid.Row="1" Grid.Column="1"></Slider> 
     <Button Grid.Row="1" Grid.Column="2">Click the other guy</Button> 
    </Grid> 
</Window> 

我想有,而无需手动做到这一点:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Width="300" Height="100"> 
    <Grid ShowGridLines="True"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Label VerticalAlignment="Center" Grid.Row="0" Grid.Column="0">Text</Label> 
     <TextBox VerticalAlignment="Center" Grid.Row="0" Grid.Column="1">I'm on the Internet</TextBox> 
     <Button VerticalAlignment="Center" Grid.Row="0" Grid.Column="2">Don't click me</Button> 
     <Label VerticalAlignment="Center" Grid.Row="1" Grid.Column="0">Text2</Label> 
     <Slider VerticalAlignment="Center" Grid.Row="1" Grid.Column="1"></Slider> 
     <Button VerticalAlignment="Center" Grid.Row="1" Grid.Column="2">Click the other guy</Button> 
    </Grid> 
</Window> 

虽然我不是真的很确定这里有什么区别。这不是一个交易破坏者或任何东西,但我想这样做。

+0

您能够利用例如参考更多信息,通常是一些CONTROLTEMPLATES /风格的一些外部控制可能比对硬编码,防止正常的继承。 – 2010-03-08 05:36:19

回答

1

VisualTree继承不是通用的。依赖项属性指定它在声明时会继承可视树。在这种情况下,verticalalignment不是。

获得一致的垂直对齐的唯一方法是使用样式。而且不能在不同类型的控件中使用隐式样式。因此,您需要创建一个命名样式,将其放置在容器的资源中。将样式添加到样式中,以将垂直对齐设置为所需的任何值。最后在您希望应用的所有控件中引用该样式。

这里是你的样式完成样式......不幸的是,你并没有节省太多的输入,但是如果你的样式做了类似于Set VerticalAlignment和FontFamily的东西,那么你就节省了空间......如果你觉得它像那么CSS和WPF样式很容易。

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Width="300" Height="100"> 
    <Grid ShowGridLines="True"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid.Resources> 
      <Style x:Key="setVA" TargetType="{x:Type Control}"> 
       <Setter Property="VerticalAlignment" Value="Center"/> 
      </Style> 
     </Grid.Resources> 
     <Label Style="{StaticResource setVA}" Grid.Row="0" Grid.Column="0">Text</Label> 
     <TextBox Style="{StaticResource setVA}" Grid.Row="0" Grid.Column="1">I'm on the Internet</TextBox> 
     <Button Style="{StaticResource setVA}" Grid.Row="0" Grid.Column="2">Don't click me</Button> 
     <Label Style="{StaticResource setVA}" Grid.Row="1" Grid.Column="0">Text2</Label> 
     <Slider Style="{StaticResource setVA}" Grid.Row="1" Grid.Column="1"></Slider> 
     <Button Style="{StaticResource setVA}" Grid.Row="1" Grid.Column="2">Click the other guy</Button> 
    </Grid> 
</Window> 

有上using styles on MSDN

+0

啊,谢谢。好像我还没到那里,而且它看起来比它的价值更麻烦。当我阅读关于样式时,我会试试看。和男孩,这样的例子在msdn看起来很丑。 – zxcvbnm 2010-03-08 06:19:51