WPF:如何正确设置 ComboBox 下拉菜单的宽度

WPF: How to Set the Width of a ComboBox's DropDown Correctly

我即将使用 XAML 在 WPF 中设计一个 DropDown。如果我的文本比 Width 长,那么 ComboBoxDropDown 元素就比 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>

PopupWidth绑定到ComboBoxWidth并将属性附加的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>