2010-03-08 74 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