通过 Children[] 索引访问边界内的元素
Posted
技术标签:
【中文标题】通过 Children[] 索引访问边界内的元素【英文标题】:Accessing element within border through Children[] indexing 【发布时间】:2022-01-24 01:14:16 【问题描述】:我正在尝试访问边界内的 TextBlock“fastcolor”。
边框位于名为 fastcard 的 DockPanel 中,我将其作为参数传递给另一个类。
我的问题是:如何访问边界内名为“fastcolor”的TextBlock?
这段代码:
(TextBlock)fastcard.Children[0]
允许访问边框,而这段代码:
(TextBlock)fastcard.Children[1]
允许访问名为“fastprice”的 TextBlock
XAML:
<DockPanel Canvas.ZIndex="1" x:Name="fastcard" Background="White" Width="225" Height="300" Visibility="Hidden">
<Border BorderBrush="Black" BorderThickness="1">
<TextBlock x:Name="fastcolor" FontSize="10" Foreground="Black" Width="225" Height="50" VerticalAlignment="Top" Visibility="Visible" />
</Border>
<TextBlock x:Name="fastprice" Text="Price: " FontSize="15" Foreground="Black" Width="150" Height="25" VerticalAlignment="Top" Margin="-290,50,0,0" FontWeight="Bold"/>
</DockPanel>
【问题讨论】:
【参考方案1】:您必须遍历可视化树才能获取元素。根据此示例 (How to: Find DataTemplate-Generated Elements),您可以按元素类型查找元素,或者在稍作修改后按元素名称查找元素。这种递归算法允许您检索任何元素,而无需了解确切的可视化树组成。
// The parameter 'obj' is the parent element.
// In your case this is the DockPanel.
private FrameworkElement FindVisualChildByName(DependencyObject obj, string elementName)
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null
&& child is FrameworkElement element
&& element.Name.Equals(elementName, StringComparison.OrdinalIgnoreCase))
return element;
else
FrameworkElement childOfElement = FindVisualChild(element, elementName);
if (childOfElement != null)
return childOfChild;
return null;
示例
var textBlock = FindVisualChildByName(this.fastcard, "fastcolor") as TextBlock;
【讨论】:
以上是关于通过 Children[] 索引访问边界内的元素的主要内容,如果未能解决你的问题,请参考以下文章