使用 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) 中选择字母字符的主要内容,如果未能解决你的问题,请参考以下文章
[WPF 自定义控件]在MenuItem上使用RadioButton
Android RadioGroup和RadioButton详解