选中一大组复选框
本文关键字:复选框 | 更新日期: 2023-09-27 18:24:14
我想说:
获取第一个文本块,然后是第一个复选框,两者的名称中都有数字1。
如果选中复选框,则可以填充文本块。
参见代码:
for (int i = 1; i < 10; i++)
{
TextBlock a = (this.FindName(string.Format("tb_{0}", i)) as TextBlock);
CheckBox b = (this.FindName(string.Format("ck_{0}", i)) as CheckBox);
if (b.IsChecked.HasValue)
{
if (a != null) a.Text = data.ArrayOfSensors[i].ToString();
}
else
{
if (a != null) a.Text = data.ArrayOfSensors[0].ToString();
}
}
因此,当复选框被启用时,文本块将填充数组中的索引。
非常感谢!
编辑:一个稍微好一点的解释:
文本块命名为:tb_1、tb_2等
复选框命名为:cb_1、cb_2等
阵列为:
[0]0
[1] 100
[2] 150
数字是他们所有人的共同点。所以我可以使用一个for循环,I作为每个循环的公共变量。我还有大约50个文本框和组合框,不想单独写出来。
编辑:我的组合框和文本块是在Xaml代码上创建的,如下所示:
<CheckBox x:Name="Cb_1" Width="15" Height="15" Margin="349,53,127,164" IsChecked="True" />
<TextBlock x:Name="tb_1" Text="80" Height="20" Width="20" Margin="266,35,205,177" />
如果不看XAML的样子,很难回答这个问题,但听起来你可能试图像使用WinFirms一样使用WPF。
要在WPF中构建这样的接口,首先应该创建一个自定义类来保存数据,然后使用ItemsControl
来呈现数据集合。
例如,你的类可能看起来像这个
public class SensorData() : INotifyPropertyChanged
{
// should implement INotifyPropertyChanged of course
public string Text { get; set; }
public bool IsChecked { get; set; }
}
并且ObservableCollection<SensorData>
可以使用具有包含CheckBox
和TextBox
的ItemsPanelTemplate
的<ItemsControl>
来呈现
<ItemsControl ItemsSource="{Binding MyCollectionOfSensorData}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Checked="{Binding IsChecked}" />
<TextBlock Text="{Binding Text}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这将循环遍历SensorData
对象的集合,并为每个对象呈现一个CheckBox和TextBox。如果要从代码背后对数据进行任何操作,只需要修改SensorData
对象的属性。
例如,你可以有一个循环,去
for (int i = 0; i < MyCollectionOfSensorData.Length; i++)
{
SensorData item = MyCollectionOfSensorData[i];
if (item.IsChecked)
item.Text = data.ArrayOfSensors[i].ToString();
else
item.Text = "0";
}
并且根本不会与UI对象进行交互。