2016-04-12 2 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++; 
    } 
} 

Но я не имею никакой удачи в получении доступа к TextBlock (NullException). Как я могу получить доступ к текстовому свойству Textblock's, когда он находится внутри программы Button?

+2

Я думаю, что проблема '((контроль как кнопка) .content) .Children' вам, вероятно, нужно иметь это' ((управление как кнопка) .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

С TextBlock помещается внутри кнопки, как содержание непосредственно и не использовать какие-либо Container Controls как StackPanel вам не нужно использовать Children. Просто используйте это:

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++; 
    } 
} 
Смежные вопросы