如何处理我在代码中动态创建的 UI 元素?
How to address a UI Element I created dynamically in my code?
我目前在一个项目中工作,通过 RS232 获取参数。
我的程序将在 Raspberry Pi 上 运行 并将使用 Win10 物联网平台。
为了显示我收到的参数,我从我的代码隐藏文件动态创建了一个网格。 (这已经在起作用了。)
在我获得参数后,设备会向我发送一个包含最小值的列表。和最大。值。使用此列表作为参考,我创建了一个滑块、切换开关或文本框。
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);
}
"minimum" 和 "maximum" 是我从串行设备获取的变量。
如您所见,我将滑块元素的名称设置为 "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 元素中的值替换它。
我怎样才能做到这一点?
此处为动态创建的控件指定唯一的名称:
ParameterSlider.Name = "Slider" + CountControls;
...
ParaValue.Name = "Value" + CountControls;
您以后总能通过名称找到 UI 元素:
TextBlock dynamicallyCreatedTextBlock = SettingsGrid.FindName("Value129") as TextBlock;
dynamicallyCreatedTextBlock.Text = "Got it";
Binding binding = new Binding();
binding.Path = new PropertyPath("Value");
binding.Source = ParameterSlider;
BindingOperations.SetBinding(ParaValue, TextBlock.TextProperty, binding);
现在您的 textbox.text 已绑定到滑块的值并自动更新它。酷吗?
对于动态创建的引用元素,可以这样查找:
foreach (UIElement element in SettingsGrid.Children)
{
System.Diagnostics.Debug.WriteLine(element.GetType());
if (element.GetType().Name is "Slider")
{
var elementNew = element as Slider;
ParaValue.Text = elementNew.Value.ToString();
}
}
我目前在一个项目中工作,通过 RS232 获取参数。 我的程序将在 Raspberry Pi 上 运行 并将使用 Win10 物联网平台。
为了显示我收到的参数,我从我的代码隐藏文件动态创建了一个网格。 (这已经在起作用了。)
在我获得参数后,设备会向我发送一个包含最小值的列表。和最大。值。使用此列表作为参考,我创建了一个滑块、切换开关或文本框。
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);
}
"minimum" 和 "maximum" 是我从串行设备获取的变量。
如您所见,我将滑块元素的名称设置为 "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 元素中的值替换它。
我怎样才能做到这一点?
此处为动态创建的控件指定唯一的名称:
ParameterSlider.Name = "Slider" + CountControls;
...
ParaValue.Name = "Value" + CountControls;
您以后总能通过名称找到 UI 元素:
TextBlock dynamicallyCreatedTextBlock = SettingsGrid.FindName("Value129") as TextBlock;
dynamicallyCreatedTextBlock.Text = "Got it";
Binding binding = new Binding();
binding.Path = new PropertyPath("Value");
binding.Source = ParameterSlider;
BindingOperations.SetBinding(ParaValue, TextBlock.TextProperty, binding);
现在您的 textbox.text 已绑定到滑块的值并自动更新它。酷吗?
对于动态创建的引用元素,可以这样查找:
foreach (UIElement element in SettingsGrid.Children)
{
System.Diagnostics.Debug.WriteLine(element.GetType());
if (element.GetType().Name is "Slider")
{
var elementNew = element as Slider;
ParaValue.Text = elementNew.Value.ToString();
}
}