WPF MVVM: высота ComboBox различна для целых чисел - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над приложением WPF, следующим за MVVM. У меня есть два ComboBox в приложении. Один привязан к списку промежуточных элементов, а другой - к списку строк. Проблема в том, что высота комбо-боксов различна (см. Рисунок ниже). Есть идеи, почему высоты разные? На обоих выпадающих списках нет стилизации.

enter image description here

Вид:

<UserControl.Resources>
    <Style TargetType="ComboBox" >
       <Setter Property="Margin" Value="5" />
    </Style>
    <Style TargetType="TextBlock" >
       <Setter Property="Margin" Value="5" />
       <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
</UserControl.Resources>
...
<StackPanel>
    <TextBlock Text="{x:Static p:Resources.OutputLayersAsText}" />
    <ComboBox ItemsSource="{Binding StringCollection}" />
    <TextBlock Text="{x:Static p:Resources.IgzStatAreaSizeText}" />
    <ComboBox ItemsSource="{Binding IntegerCollection}" />
</StackPanel>

ViewModel:

private ObservableCollection<string> _stringCollection;
public ObservableCollection<string> Stringcollection => _stringCollection ?? (_stringCollection = new ObservableCollection<string>
{
     ".igz", ".png+.png", ".jpg+.png"
});

private ObservableCollection<int> _integerCollection;
public ObservableCollection<int> IntegerCollection => _integerCollection ?? (_integerCollection = new ObservableCollection<int>
{
    8, 12, 16, 24, 32, 48, 64, 96, 128
});

Я также попробовал другой комбинированный список с набором перечислений, и его высота была аналогична целочисленной высоте комбинированного списка.

1 Ответ

1 голос
/ 21 мая 2019

Видимо, стиль TextBlock по умолчанию также применяется к TextBlocks в визуальном дереве ComboBox. Не знаю, почему это влияет только на те элементы, которые отображают целые числа, но не на те, которые отображают строки.

Поскольку у вас уже есть стиль ComboBox, вы можете легко избежать этого поведения, явно определив ItemTemplate:

<Style TargetType="ComboBox" >
    <Setter Property="Margin" Value="5" />
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...