在不使用x:Name属性的情况下从xaml文件中获取元素
本文关键字:xaml 情况下 文件 元素 获取 属性 Name | 更新日期: 2023-09-27 18:13:07
所以我有几个元素我想在我的c#类中使用。下面是我的xaml文档的几行,我想从中提取元素:
<TextBlock x:Name="diastolic17" FontSize="10" Foreground="Ivory" Grid.Row="19"
Grid.Column="4"
TextAlignment="Center">0</TextBlock>
<TextBlock x:Name="diastolic18" FontSize="10" Foreground="Ivory" Grid.Row="20"
Grid.Column="4"
TextAlignment="Center">98</TextBlock>
<TextBlock x:Name="diastolic19" FontSize="10" Foreground="Ivory" Grid.Row="21"
Grid.Column="4"
TextAlignment="Center">88</TextBlock>
它们都在同一个命名空间中。我以前只是使用x:Name属性来获取TextBlocks,但问题是,我现在有一个巨大的TextBlocks列表,我怀疑唯一的方法就是输入每个Textblock的名称。如果有人能说明他们将如何处理这个问题?简单的解决方案将是首选,我是一个新手程序员,这是一个学校项目。
使用方法FindVisualChildren
。它遍历可视化树,找到你想要的控件。
这应该能奏效
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
然后像这样枚举控件
foreach (TextBlock tb in FindVisualChildren<TextBlock>(window))
{
// do something with tb here
}
如果你需要引用很多控件,你可以将它们分组在一个控件中(stackpanel, grid,…),并通过枚举容器的子控件来访问这些控件。
另一个选择是使用数据绑定。这样,您可能根本不需要引用控件。