2017-06-12 139 views
-1

我有一個用戶控件,我需要從另一個窗口訪問該用戶控件上的標籤..例如...只需更改標籤的文本。例如..用戶控件上的訪問控制

Usercontrol.label1.content = "Got it" 

我可以在主窗口做訪問任何控制以下內容:

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

如何做到這一點在WPF用戶控件?

+1

您不需要「訪問」任何地方的任何標籤。使用視圖模型並在XAML中適當地綁定它的屬性。 –

回答

0

要訪問主窗口:

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

如果你的用戶控件定義靜態這樣的:

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

你可以使用它的名字一樣:Main.uc.label1.Text = "Hello World"

如果你的用戶控件動態添加到一個容器中,嘗試以下操作:

如果您的用戶控件位於邊框中:

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

如果在你的容器的多個用戶控件,如(StackPanel中/表格/ Wrappanel等):

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

即使你可以通過檢查它的變量來得到你想要的確切用戶控件!

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

一旦您獲得了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" />