2012-03-03 101 views
6

我在VS項目中的兩個文件:Custom.xamlCustom.cs訪問XAML從C#隱藏代碼控制

在我XAML文件,我有以下文本框:

<TextBox x:Name="TextBox1" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox1_SelectionChanged" /> 

<TextBox x:Name="TextBox2" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox2_SelectionChanged" /> 

在我的.cs,我有以下方法:

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
} 

我可以帥客完美地擊中上面的事件處理程序。然後,我可以通過使用e.Source來獲取TextBox1及其屬性,但我想訪問TextBox2及其屬性。

一點題外話,在的.cs文件只是一個C#類,我引用,而不是一個xaml.cs。另外,據我所知,我可以通過UserControl來實現此功能,但由於本篇文章範圍之外的原因,在這種情況下不能這樣做。

請告知我如何獲得/設置TextBox2的屬性。

謝謝。

編輯:任何其他輸入?作爲解決方法,我添加了一個名爲TextBox2_Loaded的事件處理程序,然後將e.Source設置爲實例變量。然後,在TextBox1_SelectionChanged中,我可以訪問實例變量。真的很想直接定位控件(例如TextBox2.IsEnabled)。我必須錯過某處的聲明或繼承。甚至找不到使用FindName的控件。

+0

你是否使用textbox2作爲重複控件(gridview,listview..etc)的項目? – 2012-03-03 19:30:50

+0

不,我沒有使用gridview或listview – Josh 2012-03-03 19:43:11

回答

3

好了,所以我顯然已經離開了這篇文章中的關鍵組件... My TextBox控件位於DataTemplate控件的內部。從我的研究中,在DataTemplate控件內部無法訪問TextBox控件。我真的不認爲這很重要,但我猜這個場景存在時不會創建實例變量。

如果我錯誤地解釋了這一點,請提供輸入。現在,我已經開始並添加了一個Loaded事件,並將我的TextBox控件定義爲實例變量,以便在其他活動發生時訪問它們並更改屬性。

感謝大家的意見。

+0

當然,即使在加載的事件中,您也無法從DataTemplate訪問命名組件。 您需要捕獲您的cerated UI組件的實例。 – Ouarzy 2013-02-13 08:19:02

3

只要您設置了namein的XAML,你可以直接按名稱訪問它(XAML編譯器會爲你創建一個實例變量。)

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
    TextBox2.Text = "Whatever"; 
} 
+0

由於某些原因,我不能使用TextBox2。 Intellisense不顯示它,編譯器認爲它是未定義的。我需要繼承我的課程嗎?公共分類自定義:? – Josh 2012-03-03 19:42:52

+0

嘗試進行構建,以便Studio可以看到xaml編譯器將創建的字段。編輯。是的,您的代碼應該是與您的XAML匹配的部分類。 – GazTheDestroyer 2012-03-03 19:45:48

+0

您是否確定我對我班的定義是正確的,還是我需要繼承某些東西?另外,我已經多次構建了我的項目。 – Josh 2012-03-03 19:58:48

0

這只是發生在我身上。我不得不關閉我的解決方案並重新打開它。