我在TextBlocks
中有一组Grid
,我希望能够以编程方式访问其.Text
属性。 Buttons
中还有Images
和Grid
,所以我已经完成了一些验证;
foreach (Control control in navButtonGrid.Children)
{
if (control.GetType() == typeof(TextBlock))
{
//TextBlock.Text here
}
}
这样做我得到一个错误,
无法转换类型' System.Windows.Controls.Control'至 ' System.Windows.Controls.TextBlock'通过参考转换,拳击 转换,取消装箱转换,包装转换或null类型 转化
如何才能正确投射Control
,以便我只能访问TextBlocks
中的Grid
?
最终修改:TextBlock.Text
内的所有Buttons
都被命名,但它们都是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
将获取上一个string
的{{1}}值。我想要的是DataRow
,TextBlock1.Text = row1
等等。
答案 0 :(得分:1)
只需使用OfType
,就像这样:
foreach (var control in navButtonGrid.Children.OfType<TextBlock>())
{
//Do your stuff with control
}
或者您可以将Control
替换为var
中的 UIElement
或 foreach
:
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;
}
}
编辑:要在按钮内找到TextBlock
,您可以这样做:
else if (control.GetType() == typeof(Button))
{
TextBlock tb = ((control as Button).Content as StackPanel).Children.OfType<TextBlock>().FirstOrDefault();
}