我已经在我的项目中添加了一个usercontrol,如下所示:
Public Sub clickAutoDrillLeft(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
Dim LSliderItem as New TriplexAmpsControl
me.LeftSlider.Items.Add(LSliderItem)
End sub
“LSliderIn”对象是一个项控件,“TriplexAmpsControl”是一个usercontrol,它有三个writeonly属性,声明为整数,名为“AmpsPhaseA”,“AmpsPhaseB”和“AmpsPhaseC”。
如果我在运行时如上所述实例化控件,我可以立即为其中一个属性赋值:
Public Sub clickAutoDrillLeft(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
Dim LSliderItem as New TriplexAmpsControl
me.LeftSlider.Items.Add(LSliderItem)
LSliderItem.AmpsPhaseA = 50
End sub
但仅限于子程序。我不知道如何在表单的其他地方引用控件值,因为如果我尝试通过其名称从其他子句调用控件,编译器自然会告诉我控件不是项目的一部分,因为它尚未创建。
我能够找到关于主题的所有内容都关注代码隐藏中的控件的创建,但注意到如何连接到用户控件,就像我完成它一样实例化。
答案 0 :(得分:0)
(先发制人注意:请原谅我的VB - 我是C#编码器:)
您需要创建一个模块级变量:
Dim _lSliderItem as TriplexAmpsControl
然后在你的代码中某处:
Public Sub clickAutoDrillLeft(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
_lSliderItem = New TriplexAmpsControl
me.LeftSlider.Items.Add(_lSliderItem)
End sub
或者,如果由于某种原因该方法不可能,那么您可以为动态创建的控件提供名称,稍后在代码中使用FrameworkElement.FindName()方法(大多数UI控件将从FrameworkElement派生)。或者您可以像这样编写自己的小搜索功能(原谅C#语法,将它翻译成VB应该不是问题):
public static DependencyObject FindChild(this DependencyObject o, Type childType, string childName, bool checkObjectItself)
{
if (checkObjectItself && (((string)o.GetValue(FrameworkElement.NameProperty)) == childName))
return o;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
{
DependencyObject obj2 = VisualTreeHelper.GetChild(o, i).FindChild(childType, childName, true);
if (obj2 != null)
return obj2;
}
return null;
}