用户控制的访问控制

时间:2017-06-12 19:00:25

标签: wpf vb.net user-controls

我有一个用户控件,我需要从另一个窗口访问该用户控件上的标签。例如......只需更改标签的文本即可。实施例..

Usercontrol.label1.content = "Got it"

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

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

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

2 个答案:

答案 0 :(得分:0)

访问MainWindow:

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

如果您的UserControl静态定义如下:

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

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

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

如果您的UserControl位于边框:

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

如果容器中有多个UserControl,例如(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"

答案 1 :(得分:-1)

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

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

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

这当然假设屏幕上有Window1已打开且可见,并且您在窗口的XAML标记中为UserControl元素提供了x:Name

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