UWP ComboBox IsEditable 无法正常工作

UWP ComboBox IsEditable does not work right

这是我的代码,组合框控件包含文本和图像:

XAML 代码:

<ComboBox Name="cb1"
          VerticalAlignment="Center" HorizontalAlignment="Center" 
          Header="Abcd"
          IsEditable="True"
          Margin="5"
          Width="120">

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding Icon}" Width="20" Height="20" Margin="5,0,10,0"/>
                <TextBlock Text="{Binding Text}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

C# 代码:

public sealed partial class SamplePage2 : Page
{
    public SamplePage2()
    {
        InitializeComponent();

        cb1.Items.Add(new Model
        {
            Icon = new BitmapImage(new Uri("ms-appx:///Assets/Images/mecca.png")),
            Text = "بقره"
        });

        cb1.Items.Add(new Model
        {
            Icon = new BitmapImage(new Uri("ms-appx:///Assets/Images/medina.png")),
            Text = "فاتحه"
        });

        cb1.SelectedIndex = 0;
    }

    class Model
    {
        public BitmapImage Icon { get; set; }
        public string Text { get; set; }
    }
}

但是当我点击指针按钮,或者点击文本内部...时,看到这张图片:

我该如何解决这个问题?

注意:我需要 'IsEditable' 功能 [ 因为我希望用户通过编写文本快速到达所需的选项。 ]

UWP ComboBox IsEditable does not work right

问题是显示成员是模型class,所以它是不可编辑的,对于你的场景,我们建议你制作一个字符串集合作为ComboBox数据源。然后使用图像转换器根据项目的内容设置图像源。更多请参考这个案例reply.

<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Image
                Width="22"
                Height="22"
                Source="{Binding Converter={StaticResource ImageConverter}}"
                />
            <TextBlock
                Margin="10"
                Text="{Binding}"
                TextAlignment="Center"
                />
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate>

private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    MyComboBox.ItemsSource = new List<string>() { "Red", "Green", "Blue" };
} 

图像转换器

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        string resaut = string.Empty;
        switch (value.ToString())
        {
            case "Blue":
                resaut = "ms-appx:///Assets/BlueImage.png";
                break;
            case "Green":
                resaut = "ms-appx:///Assets/GreenImage.png";
                break;
            case "Red":
                resaut = "ms-appx:///Assets/RedImage.png";
                break;
            default:
                break;
        }
        return resaut;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}