自定义选择器 C# UWP 上的多项选择

Posted

技术标签:

【中文标题】自定义选择器 C# UWP 上的多项选择【英文标题】:multiple selection on custom picker C# UWP 【发布时间】:2018-04-20 06:33:25 【问题描述】:

我一直在论坛和互联网上查找有关 C# 上的自定义选择器的信息,我有一个已经可以使用的选择器,但我的一些研究告诉我,您只能选择自定义选择器的一项,这是我用来部署选择器的代码。

选择器

<custom:CustomPicker x:Name="pickerCategories" ItemsSource="Binding listCategoriesName" SelectedIndex="Binding SelectedCategory" SelectedIndexChanged="pickerCategories_SelectedIndexChanged" Grid.Column="1" BackgroundColor="White"/>

项目来源作为数据库中的对象列表提供给选择器 有没有办法能够选择自定义选择器的多个索引? 例如...

Picker pk = new Picker(); pk.SelectionMode=Multiple; 

【问题讨论】:

【参考方案1】:

根据您的要求,您可以在本机 uwp 项目中制作自定义 Picker 渲染器。然后创建一个新的DataTemplate 用于在本机控件中显示包含复选框的ComboBox 项。

<DataTemplate x:Key="templateEmployee" >
    <StackPanel  Orientation="Horizontal">
        <CheckBox Content="Binding Content,Mode=TwoWay" IsChecked="Binding IsCheck,Mode=TwoWay" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </StackPanel>
</DataTemplate>

对于CustomPickerRenderer,您应该将表单Picker 项目源传递给本机控件(组合框)。当组合框下拉关闭时,您可以执行InvokeAction 方法将Data 发送到表单Picker

public class CustomPickerRenderer : PickerRenderer

    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    
        base.OnElementChanged(e);
        Control.ItemsSource = e.NewElement.ItemsSource;
        Control.ItemTemplate = (Windows.UI.Xaml.DataTemplate)App.Current.Resources["templateEmployee"];
        Control.DropDownClosed += Control_DropDownClosed;

    

    private void Control_DropDownClosed(object sender, object e)
    
        var NewElement = Element as CustomPicker;
        var items = (sender as ComboBox).ItemsSource;
        NewElement.InvokeAction(items);
    


用法

public MainPage()

    InitializeComponent();
    MyPicker.ItemsSource = new MainViewModel().itemSource;
    MyPicker.RegisterAction(IsCheckItems);

private List<Item> SelecItms = new List<Item>();
private void IsCheckItems(object data)

    var items = data as ObservableCollection<Item>;
    var str = new StringBuilder();
    foreach (var item in items)
    
        if (item.IsCheck)
        
            SelecItms.Add(item);
            str.AppendLine(item.Content);
        
    
    SeleitemLabel.Text = str.ToString();

我已经上传了code sample。请检查。

【讨论】:

它真的很有用,我能够解决我的问题! 如果您使用 UWP PickerRenderer ...并且您更改了 CustomPicker 所在的布局,...那么您的 UWP 应用程序将崩溃。在这个 UWP 废话从我脚下拉开地毯之前浪费了五个星期。请注意。

以上是关于自定义选择器 C# UWP 上的多项选择的主要内容,如果未能解决你的问题,请参考以下文章

UWP 颜色选择器(ColorPicker) 和 自定义的Flyout(AdvancedFlyout)

日期选择器上的自定义输入字段

如何在 xamarin.UWP 中的 Viewcell 项目选择上设置自己的颜色?

不为空的自定义数据属性上的 jQuery 选择器

颜色组合框和自定义颜色选择器

枚举列laravel 8上的多项选择