我有一个ItemsControl,没什么特别的: -
<ItemsControl ItemsSource="{Binding ...}"
ItemTemplate="{StaticResource ...}" />
ItemTemplate包含以下XAML: -
<Border BorderThickness="0,0,0,1"
BorderBrush="LightGray"
Padding="0,2,0,2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"
SharedSizeGroup="Prompt" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding ...}" />
<NumericUpDown Grid.Column="1"
Width="75"
Text="{Binding ...}" />
</Grid>
</Border>
这会生成如下所示的UI: -
但是如果TextBlock中的文本很长,它会将NumericUpDown从r.h中推出。 ItemsControl的边缘,例如: -
我希望一旦NumericUpDown被“推高”对抗r.h.如果ItemsControl的边缘,TextBlock将开始被截断。我假设当前行为是由于ItemsControl使用StackPanel作为其项目演示者。我怎样才能让它做我想做的事?
答案 0 :(得分:1)
当您使用SharedSizeGroup
Grid.IsSharedSizeScope="True"
时,该列的星号大小被视为Auto
,更多不是官方信息here。
IsSharedSizeScope
不应用于排列问题中描述的控件。您应删除所有SharedSizeGroup
个属性,并将ItemsControl's
HorizontalAlignment
设置为Left
。
答案 1 :(得分:0)
我认为您可能想尝试在Stretch
上设置Control.HorizontalContentAlignment
Property到ItemsControl
。根据链接页面,这个:
获取或设置控件内容的水平对齐方式。
简单来说,这意味着它应该将呈现的子项或项目的Width
设置为与Width
相同的ItemsControl
。
答案 2 :(得分:0)
在经历了很多遇到死胡同之后我想通过改变ItemsPresenter或ItemsPanel来解决这个问题,我最终在我的ItemTemplate中使用了DockPanel而不是网格: -
<Border BorderThickness="0,0,0,1"
BorderBrush="LightGray"
Padding="0,2,0,2">
<DockPanel LastChildFill="true">
<NumericUpDown DockPanel.Dock="Right"
Width="75"
Text="{Binding ...}" />
<TextBlock Text="{Binding ...}" />
</DockPanel>
</Border>
我不完全确定为什么DockPanel尊重父ItemsControl的大小,而Grid很高兴从边缘水平“溢出”。这是WPF的一个方面,我仍然在努力 - 控制'大小受父母的影响,并受到孩子大小的影响!