Я собираюсь разработать DropDown
в WPF с использованием XAML. Если мой текст становится длиннее Width
, мой DropDown
элемент ComboBox
больше, чем TextBox
(как показано красной стрелкой). Слишком длинные тексты обрабатываются многоточием (...).
Любые идеи, как это исправить?
Это мой текущий код XAML:
<ItemsControl x:Name = "ItemsControl"
ItemsSource = "{Binding FilterUiModels}">
<ItemsControl.ItemTemplate>
<DataTemplate x:Name = "UiModelTemplate">
<ComboBox x:Name = "FilterComboBox"
ItemsSource = "{Binding AvailableItems}"
SelectedItem = "{Binding FilterItem}"
ScrollViewer.CanContentScroll = "False"
Width = "200">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Width = "{Binding ActualWidth, ElementName=FilterComboBox}"
Text = "{Binding}"
TextTrimming = "CharacterEllipsis">
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Привяжите Width
Popup
к Width
ComboBox
и установите свойство ScrollViewer.HorizontalScrollBarVisibility
в false
, чтобы скрыть любую горизонтальную полосу прокрутки:
<ComboBox x:Name = "FilterComboBox"
ItemsSource = "{StaticResource localTimeList}"
SelectedItem = "{Binding FilterItem}"
ScrollViewer.CanContentScroll = "False"
ScrollViewer.HorizontalScrollBarVisibility = "Disabled"
Width = "200">
<ComboBox.Resources>
<Style TargetType = "Popup">
<Setter Property = "Width" Value = "{Binding ActualWidth, ElementName=FilterComboBox}"/>
</Style>
</ComboBox.Resources>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Width = "{Binding ActualWidth, ElementName=FilterComboBox}"
Text = "{Binding}"
TextTrimming = "CharacterEllipsis">
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Отдельное спасибо за подсказку ScrollViewer.HorizontalScrollBarVisibility
. Это сделало его действительно комплексным решением!