Странный "гейзенбаг" для выпадающего списка с двумя столбцами и заголовком

Основываясь на этом вопросе, я создал комбинированный список с 2 столбцами и заголовком. Однако мне нужно, чтобы столбцы были пропорционально разнесены, поэтому я удалил группы общего размера и изменил ширину на "*", Чтобы растянуть сетку, я добавил HorizontalContentAlignment на ComboBox сам. Смотрите ниже для полного xaml,

Это работало для строк с фактическими данными, но заголовки оставались выровненными по левому краю. Однако, когда я проверял это с помощью Snoop, я заметил, что заголовки были в порядке.

Видимо, когда я выбираю ComboBoxItem, который содержит заголовок, макет корректируется (следовательно, heisenbug).

Есть идеи, почему это происходит? Как бы вы решили эту проблему? Есть ли неправильный подход в создании макета пропорционально разнесены?

ComboBox выглядит следующим образом. Сотрудник является простым POCO, а коллекция - подклассом Collection<Employee> чтобы он работал в XAML. Полный проект можно найти в этой сути.

Чтобы воспроизвести это:

  1. запустить приложение
  2. запустите Snoop и проверьте приложение
  3. откройте comboBox и осмотрите элемент
  4. выберите первый 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 без этого.

Другие вопросы по тегам