用户控制的访问控制

Access controls on User Control

我有一个用户控件,我需要从另一个 Window.. 访问该用户控件上的标签。示例...只需更改标签的文本。示例..

Usercontrol.label1.content = "Got it"

我可以通过执行以下操作访问 MainWindow 上的任何控件:

Public main As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)

如何为 WPF 中的用户控件执行此操作?

获得 UserControl 所在的 window 的引用后,您可以使用此引用访问它。

因此,如果 UserControl 例如在名为 Window1 的 window 中定义,您可以通过以下方式从另一个 window 访问它:

Dim window1 As Window1 = Application.Current.Windows.OfType(Of Window1).FirstOrDefault()
window1.uc.label1.Text = "1"

这当然假设有一个 Window1 打开并在屏幕上可见,并且您在 XAML 的标记中给 UserControl 元素一个 x:Name window:

<local:UserControl1 x:Name="uc" />

访问主窗口:

Dim Main = TryCast(Application.Current.MainWindow, MainWindow);

如果您的 UserControl 是这样静态定义的:

<local:UserControl1 x:Name="uc" />

您可以直接使用它的名称:Main.uc.label1.Text = "Hello World"

如果您的 UserControl 是动态添加到容器中的,请尝试以下操作:

如果您的用户控件位于边框中:

Dim control = Main.MyBorder.Child as MyUserControl
control.label1.Text = "Hello World"

如果您的容器中有多个用户控件,例如(StackPanel/Grid/Wrappanel 等):

Dim controls = Main.MyStackPanel.Childern.OfType(Of MyUserControl)()
For Each control In controls
    control.label1.Text = "Hello World"
Next

即使您可以通过检查它具有的变量来获得您想要的确切 UserControl!

Dim control = Main.MyStackPanel.Childern.OfType(Of MyUserControl)().Where(Function(x) x.label1.Text = "myLabel").FirstOrDefault() 
//You can access any variable that exists in your UserControl by 'x'
control.label1.Text = "Hello World"