2011-11-09 48 views
1

我在一個wpf應用程序中有2個用戶控件。在我的用戶控件A中,當我點擊一個按鈕時,它將從usercontrol B中獲取文本框內的文本。當我點擊A中的按鈕時,如何訪問文本框中的文本?用戶控件之間的相互作用

public partial class UserControlB : UserControl 
    { 
     public string TextBoxText { get { return this.TextBoxB.Text; } } 
    } 

然後在用戶控件A,當我按一下按鈕

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     String s = UserControlB.TextBoxText ; 

    } 
+0

如果控件可以互相訪問(檢查修飾符),請使用它們的對象來獲取值。如果對象不可訪問,請嘗試搜索目標控件。 – Nayan

+0

我們如何去檢查修飾符? – edelweiss

+0

我的意思是,檢查相關控件是「公共」還是「私人/受保護」。如果「公開」,則可以直接訪問這些對象。 – Nayan

回答

2

添加一個屬性B,返回文本框的文本:

public class UserControlB 
{ 
    public string TextBoxText { get { return this.TextBox1.Text; } } 
} 

找到用戶控件實例B在您的xaml,然後致電屬性如下:

string txt = this.UserControlB.TextBoxText; 
+0

我在我的usercontrolB做過,但在usercontrolA方面,我無法從C#代碼訪問文本框。它表示非靜態字段方法或屬性需要對象引用 – edelweiss

+0

@edelweiss您能告訴我您的代碼嗎? – ojlovecd

+0

好像混合了靜態和非靜態字段。請代碼!編輯爲 – Nayan

0

我知道這是一個簡短的答案,但我會認爲一個FindControl(「textboxName」)應該工作。

字符串文本= userControlB.FindControl( 「文本」)

0

在你的問題你是不是正確引用您的UserControlB

private void button1_Click(object sender, RoutedEventArgs e)  
{ 
    String s = UserControlB.TextBoxText ;  
} 

在這裏,你正在尋找的類稱爲UserControlB,不物體或實例UserControlB。換句話說,你沒有指定哪個UserControlB你想看看。如果屏幕上有五個UserControlB,該按鈕如何知道使用哪一個?

閱讀Classes and Objects瞭解類(如UserControlB)與對象(您可以在程序中引用和使用的項目)之間的區別。

如果你想使用它,你在你的頁面或視圖中擁有的UserControlB應該有一個Name。一旦你找到了名字,你可以像這樣引用它:

// inside the control which contains your UserControlB 
public MainPage() 
{ 
    // find it according to its Name property 
    UserControlB theOneIWantToUse = this.UserControlB_1; 

    // once you identify it, you can get the Text value from it 
    String s = theOneIWantToUse.Text; 
} 
+0

你可能有一個與它的類型命名相同的實例,在這種情況下,我的目標是脫離目標,但這是壞壞! –

+0

對不起UserControlB_1引用了什麼? usercontrolB的名稱? – edelweiss

+0

@edelweiss是的,無論控件的Name屬性如何設置。 –

0

你可以試試這個:

在用戶控件A,

私人無效的button1_Click(對象發件人,RoutedEventArgs E) {

MainWindow rootWindow = Application.Current.MainWindow as MainWindow; 
    String s = (String)rootWindow.B.TextBoxB.text; 

}

+0

B是指什麼? – edelweiss

+0

B是第二個UserControl的名稱,就像你在你的問題中所說的那樣。同樣,TextBoxB是UserControl B中的文本框,您要從UserControl A中讀取。 – r3st0r3

+0

您是否嘗試過?它有用嗎? – r3st0r3