首页 > 解决方案 > WPF:如何正确设置组合框下拉的宽度

问题描述

我即将DropDown使用 XAML 在 WPF 中设计一个。Width如果我的文本比我DropDown的元素长于大于ComboBoxTextBox如红色箭头所示)。过长的文本由省略号 (...) 处理。

任何想法如何纠正这个问题?

在此处输入图像描述

这是我当前的 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>

标签: wpfxamlwpf-controls

解决方案


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>

推荐阅读