2016-08-24 35 views
1

這裏是我的代碼:的StackPanel - 如何把它的元素在不同的列

<Grid x:Name="SourceGrid"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 

    </Grid.RowDefinitions> 

     <TextBlock Grid.Row="0" Grid.Column="0" Text="Headers" /> 
     <TextBlock Grid.Row="0" Grid.Column="1" Text="Tags" /> 



    <ItemsControl Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding Path=AllHeaders.Fields}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding}" /> 
        <ComboBox ItemsSource="{Binding ElementName=SourceGrid, Path=DataContext.Tags}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

正如你所看到的,我有一個TextBlock和一個DataTemplate,這是一個StackPanel內的內部組合框。我想要做的是將TextBlock放入我的網格的Column = 0中,並將ComboBox放入我的網格的Column = 1中。我怎樣才能做到這一點? Grid.Column屬性在TextBlock和ComboBox中均不可訪問。

+0

爲什麼不使用'DataGrid'或'ListView'具有頭外的盒子? – ASh

回答

1

這是你的新佈局:

<Grid x:Name="SourceGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <TextBlock Grid.Row="0" 
        Grid.Column="0" 
        Text="Headers" /> 
     <TextBlock Grid.Row="0" 
        Grid.Column="1" 
        Text="Tags" /> 

     <ItemsControl Grid.Row="1" 
         Grid.ColumnSpan="2" 
         ItemsSource="{Binding Path=AllHeaders.Fields}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid x:Name="SourceGrid"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
         </Grid.ColumnDefinitions> 
         <TextBlock Text="{Binding}" 
            Grid.Column="0" /> 
         <ComboBox ItemsSource="{Binding Path=DataContext.Tags, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid},AncestorLevel=2}}" 
            Grid.Column="1" /> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 

<Grid x:Name="SourceGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <TextBlock Grid.Row="0" 
        Grid.Column="0" 
        Text="Headers" /> 
     <TextBlock Grid.Row="0" 
        Grid.Column="1" 
        Text="Tags" /> 

     <ItemsControl Grid.Row="1" 
         Grid.ColumnSpan="2" 
         ItemsSource="{Binding Path=AllHeaders.Fields}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid x:Name="SourceGrid"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
         </Grid.ColumnDefinitions> 
         <TextBlock Text="{Binding}" 
            Grid.Column="0" /> 
         <ComboBox ItemsSource="{Binding Path=DataContext.Tags, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl}}}" 
            Grid.Column="1" /> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 
+0

它的工作原理應該如此,但出現了一個問題:當我使用佈局時,我的ComboBox沒有任何內容。當我使用我的佈局時,它有它應該的內容(它綁定到DataContext.Tags)。這是爲什麼?您的佈局不會以任何方式更改綁定。 – Loreno

+0

好的,解決了這個問題 - 您在我的DataTemplate中添加了Grid,並且您給它的name屬性,它已經被父Grid使用。 – Loreno

+0

是的,因爲我沒有注意DataContext。 我想不是這樣。 我改正了我的答案。 –

相關問題