繁体   English   中英

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 无法正常工作

问题是显示成员是 model class,所以它不能编辑,对于您的场景,我们建议您将字符串集合作为 ComboBox 数据源。 然后我们图像转换器根据项目的内容设置图像源。 有关更多信息,请参阅此案例回复

<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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM