zoukankan      html  css  js  c++  java
  • WPF FindName()没找到指定名称的元素

    1.FindName()说明,可以用来获取已经注册名称的元素或标签

            //
            // 摘要:
            //     查找具有提供的标识符名的元素。
            //
            // 参数:
            //   name:
            //     所请求元素的名称。
            //
            // 返回结果:
            //     请求的元素。如果未找到匹配的元素,该值将为 null。
            public object FindName(string name);

    但是后台添加名称注册的方式是使用RegisterName(),而不是直接给Name赋值

            //
            // 摘要:
            //     提供一个可简化对 System.Windows.NameScope 注册方法访问的访问器。
            //
            // 参数:
            //   name:
            //     要在指定的名称-对象映射中使用的名称。
            //
            //   scopedElement:
            //     映射的对象。
            public void RegisterName(string name, object scopedElement);

    举例说明:

    1.直接赋值Name,无法通过FindName()查找到

    //后台添加name 的元素
    Label lbl1 = new Label();
    lbl1.Content = "张三丰";
    lbl1.Name = "lbl1"; //这样指定的无法通过FindName()查找到
    panelOne.Children.Add(lbl1);
    //查找后台添加的元素,没有找到
    Label lbl1 = this.FindName("lbl1") as Label;
    if (lbl1 != null)
    {
        MessageBox.Show(lbl1.Content.ToString());
    }

    2.使用RegisterName(),注册可以使用FindName()查找到

    TextBlock block = new TextBlock();
    block.Text = "海上生明月";
    panelOne.RegisterName("block1", block); //将block命名block1名称注册到panelOne上
    panelOne.Children.Add(block);
    //从当前窗口获取,可以访问到
    TextBlock block1 = btn1.FindName("block1") as TextBlock;
    if (block1 != null)
    {
        MessageBox.Show(block1.Text);
    }
    //从Panel获取,可以访问到
    TextBlock block2 = panelOne.FindName("block1") as TextBlock;
    if (block2 != null)
    {
        MessageBox.Show("panelOne:"+block2.Text);
    }
  • 相关阅读:
    限制结果集行数
    函数的差异
    运算符的差异
    数据类型的差异
    简介
    Spring源码阅读入门指引
    Spring的三种注入方式
    AOP面向切面编程
    leetcode771
    leetcode669
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5928981.html
Copyright © 2011-2022 走看看