2014-06-12 46 views
0

C#XAML選擇控件我在VS2013 C#以下派遣例程:使用名稱

private void B_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = (Button)sender; 
    string src = btn.Name.ToString(); 
    string foo = "G" + src.Substring(1); 

    G0.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
} 

目前,它改變了G0的知名度。我想更改代碼,這樣如果按下按鈕B123,則會改變G123.Visibility。

感謝, 丹

注:這是按鈕的通用事件處理程序。有100個按鈕,所以每個按鈕的單獨處理程序是不實際的。它也可以是下拉菜單或文本框中的處理程序。 G123是XAML頁面上的隨機控件。關鍵是,給定一個包含名稱的字符串,我如何找到相關的控件,以便我可以修改它的屬性?

+0

創建您的按鈕的事件處理程序和編寫代碼? – Matthijs

+0

使用[FindName](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname.aspx)。 – Clemens

+0

因此,如果我理解正確,當用戶按下標記爲Bxxx的按鈕時,您想要更改相應控件Gxxx的可見性,其中xxx是與控件名稱關聯的數字。爲什麼你不能只綁定xaml中的每個可見性?或者你只是希望有一個集中的位置? – GEEF

回答

0

我不確定我是否正確理解你的問題,所以我可能會猜測如果按鈕按鈕B123和G123通過數字123相互關聯。一般來說,我想你想改變可視性如果按鈕BX被改變,則按鈕GX。 爲了查找窗口中的所有控件,請查看Bryce Kahle提供的解決方案,請參閱Find all controls in WPF Window by type。在你的buttenclick句柄中,做一些類似於

private void B_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = (Button)sender; 
    string src = btn.Name.ToString(); 
    string identifier= src.Substring(1); 

    foreach (var btn in FindVisualChildren<Button>(this).Where(b => b.Name.EndsWith(identifier))) 
    { 
     if(btn.Name.StartsWith("G")) 
     btn.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
    } 
} 

希望有所幫助。

0

在評論中,用戶克萊門斯給出了答案。 (因爲他沒有把它作爲一個答案,我可以不選它。)

使用FindName,我是能夠得到所需控件的屬性:

private void B_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = (Button)sender; 
    string src = btn.Name.ToString(); 
    string foo = "G" + src.Substring(1); 
    Windows.UI.Xaml.Shapes.Rectangle rect = (Windows.UI.Xaml.Shapes.Rectangle)this.FindName(foo); 
    rect.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
} 

這有靈活性,以便我可以更改指定控件的填充,內容,文本,前景,樣式等。比我簡單地使用XAML綁定更多的控制。

感謝克萊門斯,