Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选中一大组复选框_C#_Wpf_Xaml_Checkbox - Fatal编程技术网

C# 选中一大组复选框

C# 选中一大组复选框,c#,wpf,xaml,checkbox,C#,Wpf,Xaml,Checkbox,我想说: 获取第一个文本块,然后是第一个复选框,它们的名称中都有数字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("c

我想说:

获取第一个文本块,然后是第一个复选框,它们的名称中都有数字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();
            }

        }
for(int i=1;i<10;i++)
{
TextBlock a=(this.FindName(string.Format(“tb_{0}”,i))作为TextBlock);
复选框b=(this.FindName(string.Format(“ck_{0}”,i))作为复选框);
如果(b.IsChecked.HasValue)
{
如果(a!=null)a.Text=data.ArrayOfSensors[i].ToString();
}
其他的
{
如果(a!=null)a.Text=data.ArrayOfSensors[0].ToString();
}
}
因此,当复选框被启用时,textblock将使用数组中的索引填充

非常感谢

编辑:稍微好一点的解释:

文本块的名称为:tb_1、tb_2等

复选框的名称为:cb_1、cb_2等

阵列是:

[0]0

[1] 一百

[2] 一百五十

这个数字是他们的共同点。因此,我可以使用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的外观,很难回答这个问题,但是听起来您可能试图像使用WinML一样使用WPF

要在WPF中构建这样的接口,首先应该创建一个自定义类来保存数据,然后使用
ItemsControl
呈现数据集合

例如,您的类可能如下所示

public class SensorData() : INotifyPropertyChanged
{
    // should implement INotifyPropertyChanged of course
    public string Text { get; set; }
    public bool IsChecked { get; set; }
}
可观察集合
可以使用
项目模板
来呈现,该模板包含
复选框
文本框

<ItemsControl ItemsSource="{Binding MyCollectionOfSensorData}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox Checked="{Binding IsChecked}" />
                <TextBlock Text="{Binding Text}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

而且不会与UI对象进行任何交互。

您所说的“获取第一个文本块,然后是第一个复选框,两者的名称中都有数字1。在您的问题中”是什么意思?这些疯狂的事情的目的是什么?:)为你们添加了编辑!:)我没有那样做。我生成了一个随机数,然后填充数组。然后,它将其输入ui。请参见编辑!:)@TomPitts正如Rachel所说,您正在尝试像WinForms一样使用WPF。。。这不好。对于这个项目,我必须使用WPF。我只想简单地说,如果textblock和combobox名称都以1结尾,并且combobox被选中,那么textblock将显示来自数组位置[1]的文本。将其包装在for循环中,这样我就可以在每个文本块和组合框中运行它,所以2将是下一个,对于数组中的每个位置依此类推。@TomPitts
。FindName
默认返回一个
对象的数据类型
,因此您希望将其强制转换为
复选框
,以访问复选框特定的属性。问题代码中使用的语法(
CheckBox b=(this.FindName(string.Format(“ck{0}”,i))作为CheckBox)
)意味着“创建一个CheckBox类型的变量,调用它
b
,并尝试将
.FindName
的结果解析到其中。如果解析失败,则将其赋值为null”。通常,您应该始终检查
b!=在使用它以避免出现
NullReferenceException
异常之前well@TomPitts很高兴这对您有帮助~如果您继续使用WPF编程,我强烈建议您学习MVVM设计模式。它是WPF开发的标准,使编码和维护更加容易:)
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";
}