我在这里建立了一个小型WPF应用程序。它完全使用MVVM构建,只使用链接到视图模型类型的DataTemplates。
我已经看到很多关于如何拉伸和剪辑ListBox
es内容以使项目填充其父级的问题。经过大量的实验后,我设法解决了这个问题,但现在我发现自己处于与ItemsControl
相同的情况下,但同样的技巧似乎不起作用。
以下是正在使用的DataTemplate
之一(简单TextBox
)。请注意我是如何尝试设置HorizontalAlignment
...
<DataTemplate DataType="{x:Type vm:OneOfMyViewModelTypes}">
<TextBox
Text="{Binding Path=Value}"
HorizontalAlignment="Stretch"
/>
</DataTemplate>
以下是ItemsControl
...
Grid
<Grid Background="Gray">
<Grid.Margin>
<Thickness
Left="{StaticResource ConfigurationDefaultMargin}"
Right="{StaticResource ConfigurationDefaultMargin}"
Bottom="{StaticResource ConfigurationDefaultMargin}"
Top="{StaticResource ConfigurationDefaultMargin}"
/>
</Grid.Margin>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="_key" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="_value" Width="*"/>
</Grid.ColumnDefinitions>
<ItemsControl
Background="DimGray"
Grid.IsSharedSizeScope="True"
ItemsSource="{Binding Path=Configuration, Mode=OneWay}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="_key"/>
<ColumnDefinition SharedSizeGroup="_value"/>
</Grid.ColumnDefinitions>
<TextBlock
Style="{StaticResource ExtensionConfigurationLabel}"
Grid.Column="0"
Margin="5,5,5,0"
Text="{Binding Path=Caption}"
/>
<ContentPresenter
Grid.Column="1"
HorizontalAlignment="Stretch"
Margin="5,5,5,0"
Content="{Binding}"
/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我用颜色来查看控件的大小。 Grid
为灰色,ItemsControl
为深灰色。
这是结果......
正如您可以从颜色中看到,Grid
包含ItemsControl
,而HorizontalAlignment
则没有。我确实将Stretch
属性设置为{{1}}但似乎没有效果。还有什么我需要做的吗?
由于
答案 0 :(得分:2)
您的主(外部)网格中有两列,但您只使用第一列。 第二列使用所有剩余空间。