2017-06-12 2 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"

UserControlが国境にある場合:

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" /> 
関連する問題