【问题标题】:Accessing element within border through Children[] indexing通过 Children[] 索引访问边界内的元素
【发布时间】: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>

【问题讨论】:

    标签: c# wpf xaml children textblock


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      相关资源
      最近更新 更多