基于this SO问题,我创建了一个包含2列和标题的组合框。但是,我需要按比例分隔列,因此我删除了共享大小组,并将宽度更改为"*"
。为了拉伸网格,我在HorizontalContentAlignment
本身添加了ComboBox
。请参阅下面的完整xaml
。
这适用于具有实际数据的行,但标题保持左对齐。但是,当我用Snoop检查时,我注意到标题很好。
显然,当我选择包含标题的ComboBoxItem
时,布局会得到纠正(因此,heisenbug)。
为什么会这样?你怎么解决这个问题?在按比例间隔布局时,是否采用了错误的方法?
ComboBox看起来像这样。员工是一个简单的POCO,集合是Collection<Employee>
的子类,使其在XAML中工作。完整项目可在此gist中找到。
重现这一点:
选择第一个ComboBoxItem
<ComboBox Name="cb" ItemsSource="{DynamicResource items}" HorizontalContentAlignment="Stretch">
<ComboBox.DataContext>
<obj:EmployeeCollection>
<obj:Employee Name="John" Occupation="Developer" />
<obj:Employee Name="Jack" Occupation="Spy" />
</obj:EmployeeCollection>
</ComboBox.DataContext>
<ComboBox.Resources>
<CompositeCollection x:Key="items">
<ComboBoxItem IsEnabled="False">
<Grid TextElement.FontWeight="Bold">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.Children>
<TextBlock Grid.Column="0" Text="Name"/>
<TextBlock Grid.Column="1" Text="Occupation"/>
</Grid.Children>
</Grid>
</ComboBoxItem>
<Separator/>
<CollectionContainer Collection="{Binding Source={x:Reference cb}, Path=DataContext}"/>
</CompositeCollection>
<DataTemplate DataType="{x:Type obj:Employee}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.Children>
<TextBlock Grid.Column="0" Text="{Binding Name}"/>
<TextBlock Grid.Column="1" Text="{Binding Occupation}"/>
</Grid.Children>
</Grid>
</DataTemplate>
</ComboBox.Resources>
</ComboBox>
答案 0 :(得分:1)
我没有遇到和你一样的问题。字幕总是保持完全左对齐,当我通过XAML Spy选择它时也不会(我不使用Snoop)。但只需在标题HorizontalContentAlignment="Stretch"
中添加ComboBoxItem
即可解决问题。
XAML Spy报告HorizontalContentAlignment
为Left
。