2016-04-08 17 views
1

Grid içinde bulunan TextBlocks kümesinde, .Text özelliklerinin program aracılığıyla erişebilmesini istiyorum. Ayrıca Grid içinde Buttons ve Images vardır, bu yüzden bazı doğrulama yaptım; Bir hata alıyorum Bunu yaparkenBir Kılavuzda TextBlock için Döküm Denetimi

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

,

referans dönüşüm yoluyla 'System.Windows.Controls.TextBlock' tip 'System.Windows.Controls.Control' dönüştürülemez

, boks dönüştürme, unboxing dönüştürme, sarma dönüşüm veya null türü dönüşüm

Nasıl doğru atmak ı am güçlü benim Control yüzden üzerinde erişebilmeleri Grid içinde TextBlocks mu?

SON DÜZENLEME: Ben ancak hepsi aynı Text olan isimlendirildiği Buttons içindeki TextBlock.Text hepsine sahip. Bu benim uygulamam; Eğer bunu yaparsam

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++; 
} 

tüm TextBlocks son DataRow ait string değerini alır. Ne istiyorum TextBlock1.Text = row1, TextBlock2.Text = row2 vs vs ..

cevap

1

Basitçe böyle OfType kullanmasıdır:

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

Yoksa yerini alabilir Control ile var veya UIElementforeach yılında:

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

Veya:

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

DÜZENLEME: Eğer böyle yapabilirdi Button içinde bir TextBlock bulmak için:

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

benim güncellenen cevabı kontrol edin ... benim düzenleme – CBreeze

+0

@CBreeze bakınız. –

+0

@ neyse! Tüm yardımlarınız için teşekkürler .. Son düzenlememi görebilir misiniz? – CBreeze