Странный "гейзенбаг" для выпадающего списка с двумя столбцами и заголовком
Основываясь на этом вопросе, я создал комбинированный список с 2 столбцами и заголовком. Однако мне нужно, чтобы столбцы были пропорционально разнесены, поэтому я удалил группы общего размера и изменил ширину на "*"
, Чтобы растянуть сетку, я добавил HorizontalContentAlignment
на ComboBox
сам. Смотрите ниже для полного xaml
,
Это работало для строк с фактическими данными, но заголовки оставались выровненными по левому краю. Однако, когда я проверял это с помощью Snoop, я заметил, что заголовки были в порядке.
Видимо, когда я выбираю ComboBoxItem
, который содержит заголовок, макет корректируется (следовательно, heisenbug).
Есть идеи, почему это происходит? Как бы вы решили эту проблему? Есть ли неправильный подход в создании макета пропорционально разнесены?
ComboBox выглядит следующим образом. Сотрудник является простым POCO, а коллекция - подклассом Collection<Employee>
чтобы он работал в XAML. Полный проект можно найти в этой сути.
Чтобы воспроизвести это:
- запустить приложение
- запустите Snoop и проверьте приложение
- откройте comboBox и осмотрите элемент
выберите первый 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>
1 ответ
Я не испытываю таких же проблем, как вы. Подписи всегда остаются полностью выровненными по левому краю, также не когда я выбираю их через XAML Spy (я не использую Snoop). Но проблема просто решается добавлением HorizontalContentAlignment="Stretch"
в шапку ComboBoxItem
,
Шпион XAML сообщает HorizontalContentAlignment
быть Left
без этого.