如何通过名称隐藏可见对象?

时间:2017-10-19 13:07:02

标签: c# wpf

在循环中创建textBlock后

TextBlock tb = new TextBlock();
tb.Text = dataShows.name[i];
tb.TextAlignment = TextAlignment.Center;
tb.Foreground = new SolidColorBrush(Colors.Black);
tb.Name = "tb" + i;
tb.Visibility = Visibility.Hidden;

然后我想显示textBlock,该名称是tb3相同的代码tb3.Visibility= Visibility.Visible如何使用代码中的自动查找对象名称来执行此操作?

编辑:抱歉我的语法不好。我想知道C#中的代码与javascript中的代码document.getElementById('#name')相同

2 个答案:

答案 0 :(得分:1)

例如将TextBlock对象存储在列表中:List<TextBlock>可以迭代

<强>更新

我认为你从错误的方向开始:你可以做某事。像javascripts document.getElementByID(),它叫做Reflection;但如果你是初学者,我不推荐这个。

您可以通过搜索myControl.Controls数组来获取表单/控件中的所有控件,并检查它们的名称/类型。

但最简单的方法是保存TextBlock对象的列表:

List<TextBlock> a = new List<textBlock>();

// in the creating loop:
a.Add(tb);

// access using Linq:
textBlock res = a.Find(c=>c.Name=="thename");
// is roughly the same as
foreach(TextBlock b in a)
    if(b.Name=="thename") {
        res = b;
        break;
    }

另一种方式

答案 1 :(得分:0)

C#与JavaScript不一样

您使用代码document.getElementById('#name')来显示您的意图。让我们分析一下JS在执行这一行时究竟做了什么。它在整个DOM中搜索ID为 name 的对象,并返回对它的引用。

C#不会那样运作。在某处没有容易搜索的对象堆,您只需要执行查询并获得所需的对象。如果你想保留一个对象列表,你必须自己制作该列表。

我假设你正在创建几个TextBlock - 对象。当您这样做时,您需要将它们添加到列表中,然后您可以查询该列表。以下是一个示例实现:

List<TextBlock> textBlocks = new List<TextBlock>();

private TextBlock GetTextBlockByName(string name)
{
    if(name == null) return null; //I assume that a TextBlock needs to have a name.
    // Returns the TextBlock if it was found or null if not.
    // Throws an Exception if more than one TextBlock has the same name
    return this.textBlocks.Find(t => t.Name == name).SingleOrDefault();

}

一个友好的暗示,因为我认为你对C#并不十分精通:当你使用一种新的编程语言时,不要认为它遵循你所知道的其他语言完全相同的范例,即使他们偶尔也有相似之处。我们拥有这么多不同语言的全部原因是,有些东西很容易合而为一,而另一些则很难。