有人能告訴我如何在使用ItemsControl
時正確對齊和調整控件的大小。在WPF中使用ItemsControl時正確對齊控件
我想有在左邊,說明對多個領域的權利,它們以ObservableCollection
定義的東西,如落得一個TextBox
:
First Name: [FirstNameTextBox]
Last Name: [LastNameTextBox]
Date of Birth: [DobTextBox]
而是我得到這個:
First Name: [FirstNameTextBox]
Last Name: [LastNameTextBox]
Date of Birth: [DobTextBox]
我希望所有的文本框根據最大的<TextBlock>
對齊。如果這是在一個<Grid>
控制直接完成,這將是簡單的,因爲所有的控制都是直接在網格中,你會只是有以下幾列定義來定義
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
我想我可以在使用SharedSizeGroup
屬性<Grid>
但它仍然不能正確調整大小。相反,它只在<Grid>
上顯示<TextBlock>
。
這裏是我的代碼:
<Grid Grid.IsSharedSizeScope="True" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Labels" />
<ColumnDefinition Width="*" SharedSizeGroup="InputControls" />
</Grid.ColumnDefinitions>
<ItemsControl Grid.Row="1" ItemsSource="{Binding SelectedTemplate.Fields}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels"/>
<ColumnDefinition SharedSizeGroup="InputControls"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Label}" Grid.Column="0" Margin="5"
VerticalAlignment="Center" Background="Red" />
<TextBox Text="{Binding Path=Value}" Grid.Column="1" Margin="5"
VerticalAlignment="Center" Background="Blue" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
任何想法如何,我可以解決這個問題?
謝謝。
UPDATE1:我不能得到這個工作,因爲我需要它。這是我到目前爲止有:
<Grid Grid.Row="1" Background="Purple">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="Overall" />
</Grid.ColumnDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels" Width="Auto" />
<ColumnDefinition SharedSizeGroup="InputControls" Width="*" />
</Grid.ColumnDefinitions>
<ItemsControl ItemsSource="{Binding SelectedTemplate.Fields}"
Background="Yellow"
Grid.IsSharedSizeScope="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Green">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels"/>
<ColumnDefinition SharedSizeGroup="InputControls"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Label}"
Grid.Column="0"
Margin="5"
VerticalAlignment="Center"/>
<TextBox Text="{Binding Path=Name}"
Grid.Column="1"
Margin="5"
VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
這最終顯示的是我的佈局是這樣的:
正如你看到的,我TextBox
正確對齊基於最大TextBlock
但是我的ItemsControl並不是一直延伸的。我想這是有道理的,因爲它在ColumnDefinitions
定義的同一個網格中。
現在,如果我移動ColumnDefinitions' out this grid to the outer grid and remove all instances of
Grid.IsSharedSizeScope`,我想以下幾點:
這再一次接近我所需要的是我的ItemsControl現在一路綿延,我已將其設置爲Grid.ColumnSpan="2"
,而我的TextBox
仍與TextBlock
對齊,並且一直在延伸,但現在的問題是TextBlock
應該更小,因爲列設置爲Auto
,但它們表現得好像設置了列一樣到*
,我想我失去了p因爲它已被刪除,因此使用IsSharedSizeScope
。
現在,如果我添加IsSharedSizeScope="True"
到外網,我得到以下結果:
再次,這是接近我想爲我的ItemsControl的被拉伸,我的文本框也被拉伸,但他們不再是最大的TextBlock
。
最後,如果我添加Grid.IsSharedSizeScope="True"
到ItemsControl
最初由@ MM8建議,
<Grid Grid.Row="1" Background="Purple" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels" Width="Auto" />
<ColumnDefinition SharedSizeGroup="InputControls" Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.ColumnSpan="2" >
<ItemsControl ItemsSource="{Binding SelectedTemplate.Fields}"
Background="Yellow"
Grid.IsSharedSizeScope="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Green">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels"/>
<ColumnDefinition SharedSizeGroup="InputControls"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Label}"
Grid.Column="0"
Margin="5"
VerticalAlignment="Center"/>
<TextBox Text="{Binding Path=Name}"
Grid.Column="1"
Margin="5"
VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
<!--<TextBlock Text="Invoice Number" Grid.Column="0" Margin="5" VerticalAlignment="Center"/>
<TextBox Text="InvoiceNumber" Grid.Column="1" Margin="5" VerticalAlignment="Center"/>-->
</Grid>
我得到如下:
這讓我又回到了起點,雖然定義是不同的?
我需要實現以下目標:
我在做什麼錯?
謝謝。
'ListView'會給你正是你想要的。 – XAMlMAX