控件默认初始索引中的 Winui ComboBox 无法正常工作

问题描述 投票:0回答:1

我正在创建一个用户控件,其中有一个组合框。

<UserControl>
...

        <ComboBox HorizontalAlignment="Stretch" Name="ReasonComboBox"
                  PlaceholderText="{x:Bind ComboBoxPlaceHolderLabel, Mode=OneWay}"
                  ItemsSource="{x:Bind ItemsSource}" 
                  DisplayMemberPath="{x:Bind DisplayMemberPath, Mode=OneWay}" 
                  SelectedIndex="{x:Bind SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

</UserControl>
    public int SelectedIndex
    {
        get => (int)GetValue(SelectedIndexProperty);
        set => SetValue(SelectedIndexProperty, value);
    }

    
    public static readonly DependencyProperty SelectedIndexProperty = DependencyProperty.Register(
        "SelectedIndex",
        typeof(int),
        typeof(ComboBoxInput),
        new PropertyMetadata(false, new PropertyChangedCallback(OnSelectedIndexPropertyChanged)));

如果默认初始索引为-1,则一切正常。但如果我们将默认初始索引设置为另一个值,例如:3,组合框最终将始终选择索引 0 和索引 3。调试时,它显示项目 3 被选中,但 UI 也显示项目 0 被选中,如果您尝试单击项目 0,PropertyChanged 事件不会被调用,所以现在有办法选择项目 0。

如果它只是一个本机组合框,则更改初始索引可以正常工作。仅当我们尝试将 ComboBox 嵌入用户控件时才会发生此错误。

winui-3 winui-xaml
1个回答
0
投票

我查看了您的存储库,这是您问题的最小可重现代码:

<ComboBox SelectedIndex="2">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <x:String>Item 1</x:String>
    <x:String>Item 2</x:String>
    <x:String>Item 3</x:String>
</ComboBox>

呈现:

ComboBox

根据文档

ComboBox 使用 CarouselPanel 作为其 ItemsPanel。不支持使用不同的面板作为 ItemsPanel,并且可能会导致不良行为。

因此,不更改

ItemsPanel
可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.