我可以用字符串引用WPF元素吗?

时间:2011-03-25 02:56:14

标签: c# wpf

我希望能够通过字符串中的文本引用C#中的WPF元素。像这样:

SelectElementFromString("TestButton").Opacity = 1;

我可以这样做吗?

4 个答案:

答案 0 :(得分:5)

你真的需要吗?不知怎的,我怀疑它。怎么样:

XAML:


<SomeType Name="_SomeControl" .../>

代码:


_SomeControl.SomeMethod();

以这种方式使用字符串几乎总是一个坏主意,只能使你的代码变得脆弱(我说几乎因为有一些正当的理由,它们并不常见)。另外,为什么你的方法返回一个字符串?

编辑:根据您在此处的评论,我建议您只使用一个集合来迭代您的控件:

  

我会用它,但这是一个痛苦[blah0.Property = true; blah 1.Property = true ...]是否有一些解决方案,我缺少

几乎每个初学者都希望这样做(包括我自己几年前)。创建一组名为label0label1label2等的控件,然后在这样的循环中访问它们:

for( int i = 0; i < numControls; ++i )
{
    Control c = GetControl( "label" + i );
}

由于各种原因这很糟糕,(幸运的是)完全没必要。将所有控件加载到List<T>并根据需要进行迭代。

private List<Whatever> _controls = new List<Whatever>();
private void InitControlList()
{
    _controls.Add( someControl );
    _controls.Add( someOtherControl );
    // and so on.  Now just iterate through the list 
    // when you need to update or access the controls.
}

正如H.B.所指出的,我的回答有助于OP,但可能无法帮助未来搜索此论坛的人真正需要直接回答。所以,这是Jon的答案的转贴(谢谢,如果我能= D,会给你更多的代表)

  

您可以使用FindName搜索FrameworkElement的子控件。要设置控件的名称,请使用XAML中的Name或x:Name属性。

注意:如果您使用x:Name,该控件也将作为FrameworkElement代码隐藏的字段提供,您将可以直接访问它。

答案 1 :(得分:4)

您可以使用FindName搜索FrameworkElement的子控件。要设置控件的名称,请使用XAML中的Namex:Name属性。

注意:如果您使用x:Name,该控件也将作为FrameworkElement代码隐藏的字段提供,您将可以直接访问它。

答案 2 :(得分:1)

FrameworkElement.FindName将引导您朝着正确的方向...... http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname.aspx

答案 3 :(得分:0)

   string indx ="textbox1";
var txt= layout.FindName(indx);
             TextBox sometxt= txt as TextBox;
             sometxt.Opacity = 1;

这可以帮助