c# - 如何处理我在代码中动态创建的 UI 元素?

标签 c# xaml uwp windows-10-universal windows-10-iot-core

我目前在一个项目中工作,我通过 RS232 获取参数。 我的程序将在 Raspberry Pi 上运行,并将使用 Win10 物联网平台。

为了显示我收到的参数,我从我的代码隐藏文件动态创建了一个网格。 (这已经在起作用了。)

在我获得参数后,设备会向我发送一个包含最小值的列表。和最大。值。使用此列表作为引用,我创建了一个 slider 、切换开关或文本框。

if ((maximum - minimum) > 1)
        {
            Slider ParameterSlider = new Slider();

            ParameterSlider.Name = "Slider" + CountControls;
            ParameterSlider.Width = 200;
            ParameterSlider.ValueChanged += new RangeBaseValueChangedEventHandler(ParameterSlider1_ValueChanged);
            ParameterSlider.Minimum = minimum;
            ParameterSlider.Maximum = maximum;
            ParameterSlider.Value = 0;
            ParameterSlider.VerticalAlignment = VerticalAlignment.Center;
            ParameterSlider.HorizontalAlignment = HorizontalAlignment.Left;

            SettingsGrid.Children.Add(ParameterSlider);
            Grid.SetColumn(ParameterSlider, 2);
            Grid.SetRow(ParameterSlider, CountControls);
        }

“最小值”和“最大值”是我从串行设备获取的变量。

如您所见,我将 slider 元素的名称设置为“Slider”,并在其后添加参数的位置作为数字。

“CountControls”是我用来按正确顺序创建网格的变量。当我收到串行输入时,它只会从 0 计数到 100。

对于每个元素(Slider、Toogleswitch、TextBox),我创建一个 TextBox,它显示元素当前具有的值并添加一个单位描述(mm、m、kg、s),我还将从列表中收到序列号设备可以发送给我。

到目前为止一切正常,但我在添加值框时遇到问题。 由于我动态创建了元素的名称,因此我无法在我的代码中引用它们。

这就是我创建文本框的方式:

        TextBlock ParaValue = new TextBlock();

        Thickness ValueMargin = ParaValue.Margin;
        ValueMargin.Left = 10;
        ValueMargin.Top = 5;


        ParaValue.Name = "Value" + CountControls;
        ParaValue.FontSize = 20;
        ParaValue.Text = String.Empty + UnitBlock.Units[CountControls];
        ParaValue.VerticalAlignment = VerticalAlignment.Top;
        ParaValue.Margin = ValueMargin;

        SettingsGrid.Children.Add(ParaValue);
        Grid.SetColumn(ParaValue, 3);
        Grid.SetRow(ParaValue, CountControls);

“ParaValue.Text”当前包含一个“String.Empty”,我希望将其替换为我在 UI 元素中的值。

我怎样才能做到这一点?

最佳答案

Binding binding = new Binding();
binding.Path = new PropertyPath("Value");
binding.Source = ParameterSlider; 
BindingOperations.SetBinding(ParaValue, TextBlock.TextProperty, binding);

现在您的 textbox.text 已绑定(bind)到 slider 的值并自动更新它。酷吗?

关于c# - 如何处理我在代码中动态创建的 UI 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830016/

相关文章:

c# - 转换一个可以为 null 的对象

c# - 将 dotnet 应用程序设置存储在数据库中而不是 app.config

wpf - 设置 WPF/XAML 窗口客户区大小

c# - UWP XAML 中的全局样式

c# - 在 C# 中从 '\ud835' 格式转换为 "𝓛"[UWP]

c# - uwp无法保存文件

C# 如何使图形对象可克隆

C# MongoDB.Driver GetServer 不见了,现在怎么办?

silverlight - 在 XAML 中绑定(bind)图像源

c# - TableView Viewcell 点击操作