将控件投射到网格中的 TextBlock
Casting Control to TextBlock in a Grid
我在 Grid
中有一组 TextBlocks
,我希望能够以编程方式访问它们的 .Text
属性。 Grid
里面还有Buttons
和Images
,所以我做了一些这样的验证;
foreach (Control control in navButtonGrid.Children)
{
if (control.GetType() == typeof(TextBlock))
{
//TextBlock.Text here
}
}
在执行此操作时出现错误,
Cannot convert type 'System.Windows.Controls.Control' to
'System.Windows.Controls.TextBlock' via a reference conversion, boxing
conversion, unboxing conversion, wrapping conversion, or null type
conversion
我怎样才能正确地转换我的 Control
以便我只能访问 Grid
中的 TextBlocks
?
最终编辑: 我将 Buttons
中的所有 TextBlock.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
都采用最后一个 DataRow
的 string
值。我想要的是 TextBlock1.Text = row1
、TextBlock2.Text = row2
等等……
只需像这样使用OfType
:
foreach (var control in navButtonGrid.Children.OfType<TextBlock>())
{
//Do your stuff with control
}
或者您可以将 Control
替换为 var
或 UIElement
in 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;
}
}
编辑:要在 Button 中找到 TextBlock
,您可以这样做:
else if (control.GetType() == typeof(Button))
{
TextBlock tb = ((control as Button).Content as StackPanel).Children.OfType<TextBlock>().FirstOrDefault();
}
我在 Grid
中有一组 TextBlocks
,我希望能够以编程方式访问它们的 .Text
属性。 Grid
里面还有Buttons
和Images
,所以我做了一些这样的验证;
foreach (Control control in navButtonGrid.Children)
{
if (control.GetType() == typeof(TextBlock))
{
//TextBlock.Text here
}
}
在执行此操作时出现错误,
Cannot convert type 'System.Windows.Controls.Control' to 'System.Windows.Controls.TextBlock' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
我怎样才能正确地转换我的 Control
以便我只能访问 Grid
中的 TextBlocks
?
最终编辑: 我将 Buttons
中的所有 TextBlock.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
都采用最后一个 DataRow
的 string
值。我想要的是 TextBlock1.Text = row1
、TextBlock2.Text = row2
等等……
只需像这样使用OfType
:
foreach (var control in navButtonGrid.Children.OfType<TextBlock>())
{
//Do your stuff with control
}
或者您可以将 Control
替换为 var
或 UIElement
in 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;
}
}
编辑:要在 Button 中找到 TextBlock
,您可以这样做:
else if (control.GetType() == typeof(Button))
{
TextBlock tb = ((control as Button).Content as StackPanel).Children.OfType<TextBlock>().FirstOrDefault();
}