使用 radioButtons 在 silverlight (xaml) 中选择字母字符

Posted

技术标签:

【中文标题】使用 radioButtons 在 silverlight (xaml) 中选择字母字符【英文标题】:Use radioButtons to select alphabetic characters in silverlight (xaml) 【发布时间】:2017-06-16 18:47:15 【问题描述】:

我正在制作一个 silverlight 小部件,我需要用户能够在这样的网格中选择字母字符:

如果我点击最上面一行的 a,它应该是这样的:

在视图模型中,它将被表示为一个字符串,如 chararray,因此 1 包含一个包含 a、i 的数组,而 2 包含一个包含 d、h 等的数组。

现在,我的问题是,最好的表达方式是什么?

我最初的想法是有单选按钮,按字母分组。

<RadioButton GroupName="a" Grid.Column="1" Grid.Row="1" IsChecked="Binding 1, Mode=TwoWay, Converter=StaticResource BSMClassConverter, ConverterParameter='a'" ></RadioButton>
<RadioButton GroupName="a" Grid.Column="1" Grid.Row="2" IsChecked="Binding 2, Mode=TwoWay, Converter=StaticResource BSMClassConverter, ConverterParameter='a'" ></RadioButton>
<RadioButton GroupName="a" Grid.Column="1" Grid.Row="3" IsChecked="Binding 3, Mode=TwoWay, Converter=StaticResource BSMClassConverter, ConverterParameter='a'" ></RadioButton>

然后有一个转换器将信息转换为字符串。但我无法理解这是如何工作的。我希望有人有一个好主意:-)

【问题讨论】:

【参考方案1】:

我确信有更好的方法可以做到这一点,但这是有效的,使用命令而不是转换器:

    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <RadioButton Content="a" GroupName="a" Grid.Row="0" Grid.Column="0" Command="Binding UpdateSelection" CommandParameter="1;a" />
    <RadioButton Content="a" GroupName="a" Grid.Row="1" Grid.Column="0" Command="Binding UpdateSelection" CommandParameter="2;a" />
    <RadioButton Content="a" GroupName="a" Grid.Row="2" Grid.Column="0" Command="Binding UpdateSelection" CommandParameter="3;a" />

    <RadioButton Content="b" GroupName="B" Grid.Row="0" Grid.Column="1" Command="Binding UpdateSelection" CommandParameter="1;b" />
    <RadioButton Content="b" GroupName="B" Grid.Row="1" Grid.Column="1" Command="Binding UpdateSelection" CommandParameter="2;b" />
    <RadioButton Content="b" GroupName="B" Grid.Row="2" Grid.Column="1" Command="Binding UpdateSelection" CommandParameter="3;b" />

    <RadioButton Content="c" GroupName="C" Grid.Row="0" Grid.Column="2" Command="Binding UpdateSelection" CommandParameter="1;c" />
    <RadioButton Content="c" GroupName="C" Grid.Row="1" Grid.Column="2" Command="Binding UpdateSelection" CommandParameter="3;c" />
    <RadioButton Content="c" GroupName="C" Grid.Row="2" Grid.Column="2" Command="Binding UpdateSelection" CommandParameter="3;c" />

</Grid>

在您的 ViewModel 中:

List<string> row1List = new List<string>();
    List<string> row2List = new List<string>();
    List<string> row3List = new List<string>();

    public RelayCommand<string> UpdateSelection  get; private set; 

    public MainViewModel()
    
        UpdateSelection = new RelayCommand<string>((str) => UpdateSelectionExecute(str));
    

    private void UpdateSelectionExecute(string str)
    
        string[] split = str.Split(';');

        switch (split[0])
        
            case "1":
                Remove(split[1]);
                row1List.Add(split[1]);
                break;
            case "2":
                Remove(split[1]);
                row2List.Add(split[1]);
                break;
            case "3":
                Remove(split[1]);
                row3List.Add(split[1]);
                break;
        

        OutputToConsole();

    

    private void Remove(string character)
    
        if (row1List.Contains(character))
        
            row1List.Remove(character);
        

        if (row2List.Contains(character))
        
            row2List.Remove(character);
        

        if (row3List.Contains(character))
        
            row3List.Remove(character);
        
      

    private void OutputToConsole()
    
        Console.WriteLine("List 1: ");
        row1List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c));
        Console.WriteLine("");


        Console.WriteLine("List 2: ");
        row2List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c));
        Console.WriteLine("");


        Console.WriteLine("List 3: ");
        row3List.OrderBy(o => o).ToList().ForEach((c) => Console.Write(c));
        Console.WriteLine("");
    

【讨论】:

以上是关于使用 radioButtons 在 silverlight (xaml) 中选择字母字符的主要内容,如果未能解决你的问题,请参考以下文章

求 android RadioButton属性详解

[WPF 自定义控件]在MenuItem上使用RadioButton

Android RadioGroup和RadioButton详解

如何使用 RadioButton 膨胀布局然后添加到 RadioGroup?

简述RadioGroup和RadioButton的使用

关于在 Python 中使用 Tkinter 使用 Radiobutton 的问题