通过 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[] 索引访问边界内的元素的主要内容,如果未能解决你的问题,请参考以下文章

python 序列常见使用方法

《Python基础教程》第二章:列表和元组

vue父子组件相互访问

vue父子组件相互访问

如何通过C ++中的数据获得向量的索引

列表list