2016-04-08 11 views
1

.Textのプロパティにプログラムでアクセスできるようにするために、TextBlocksのセットがGridにあります。 Gridの中にはButtonsImagesもありますので、私はそのような検証をしました。私はエラーを取得し、これを行うにはGrid内のTextBlockへのキャスト

foreach (Control control in navButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(TextBlock)) 
    { 
     //TextBlock.Text here 
    } 
} 

参照変換を使って 'System.Windows.Controls.TextBlock' にタイプ 'System.Windows.Controls.Control' を変換できません

、ボクシング 変換、アンボクシング変換、変換を包む、またはnullタイプ 変換

私は私がアクセスできるように正確に私のControlをキャストすることができていますどのようにのTextBlocks

FINAL EDIT:私は命名されているButtonsTextBlock.Textのすべてを持っている、しかし、彼らはTextすべて同じです。これは私の実装です。

int i = 0; 
foreach (DataRow row in navButtonDT.Rows) 
{ 
    foreach (UIElement control in navButtonGrid.Children) 
    { 
     if (control.GetType() == typeof(Button)) 
     { 
      TextBlock tb = ((control as Button).Content as StackPanel).Children.OfType<TextBlock>().FirstOrDefault(); 
      tb.Text = navButtonDT.Rows[i][1].ToString(); 
     } 
    } 
    i++; 
} 

私はこれを行う場合は、すべてのTextBlocksは最後DataRowstring値をとります。私が希望することはTextBlock1.Text = row1TextBlock2.Text = row2などなど。

答えて

1

は、単にこのようなOfTypeを使用することです:

foreach (var control in navButtonGrid.Children.OfType<TextBlock>()) 
{ 
    //Do your stuff with control  
} 

それとも、置き換えることができControlvarまたはUIElementforeach中:

foreach (var control in navButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(TextBlock)) 
    { 
     TextBlock tb = control as TextBlock; 
    } 
} 

または

foreach (UIElement control in navButtonGrid.Children) 
{ 
    if (control.GetType() == typeof(TextBlock)) 
    { 
     TextBlock tb = control as TextBlock; 
    } 
} 

EDIT:あなたはこのように行うことができますボタンの内側にTextBlockを見つけるには:

else if (control.GetType() == typeof(Button)) 
{ 
    TextBlock tb = ((control as Button).Content as StackPanel).Children.OfType<TextBlock>().FirstOrDefault(); 
} 
+0

私の編集 – CBreeze

+0

@CBreezeを参照してください...私の更新の答えをチェックしてください。 –

+0

@ほとんどそこに!あなたの助けてくれてありがとう..最終編集を見ることができますか? – CBreeze

関連する問題