2016-04-12 7 views
2

私はButtonsのように書式設定されています。ボタン内のTextBlock.Textにアクセス

<Button x:Name="rhsNavButton1"> 
    <TextBlock TextWrapping="Wrap" TextAlignment="Center"/> 
</Button> 

私は、これらのButtonsをループにしたいし、それらの内側TextBlock.Textを変更します。これまで私はこのようなことをしてきました。

int j = 11; 
foreach (UIElement control in RHSNavButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(Button)) 
    { 
     var tb = ((control as Button).Content).Children.OfType<TextBlock>().FirstOrDefault(); 
     tb.Text = buttonNames.Rows[j][0].ToString(); 
     j++; 
    } 
} 

しかし、私はTextBlockNullException)にアクセスするには運を持っていないのです。 Buttonの中にプログラム的にTextblock'sテキストプロパティにアクセスするにはどうすればよいですか? TextBlock以来

+2

の私は((ボタンなどのコントロール).Content)あなたはおそらくこれを持っている必要があり.Children' '((制御問題は'だと思いますButtonとして).Content)をTextBlockとして) ' – Valentin

答えて

2

使用var tb = ((control as Button).Content as TextBlock);代わり(control as Button).Content).Children.OfType<TextBlock>().FirstOrDefault();

int j = 11; 
foreach (UIElement control in RHSNavButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(Button)) 
    { 
     var tb = ((control as Button).Content as TextBlock); 
     tb.Text = buttonNames.Rows[j][0].ToString(); 
     j++; 
    } 
} 
2

は、直接コンテンツとして、ボタンの内側に配置され、あなたがChildrenを使用する必要はありませんStackPanelのような任意のContainer Controlsを使用しないでください。ただ、これを使用する:

int j = 11; 
foreach (UIElement control in RHSNavButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(Button)) 
    { 
     var tb = ((control as Button).Content) as TextBlock; 
     tb.Text = buttonNames.Rows[j][0].ToString(); 
     j++; 
    } 
} 
関連する問題