我希望能够通过字符串中的文本引用C#中的WPF元素。像这样:
SelectElementFromString("TestButton").Opacity = 1;
我可以这样做吗?
答案 0 :(得分:5)
XAML:
<SomeType Name="_SomeControl" .../>
代码:
_SomeControl.SomeMethod();
以这种方式使用字符串几乎总是一个坏主意,只能使你的代码变得脆弱(我说几乎因为有一些正当的理由,它们并不常见)。另外,为什么你的方法返回一个字符串?
编辑:根据您在此处的评论,我建议您只使用一个集合来迭代您的控件:
我会用它,但这是一个痛苦[blah0.Property = true; blah 1.Property = true ...]是否有一些解决方案,我缺少
几乎每个初学者都希望这样做(包括我自己几年前)。创建一组名为label0
,label1
,label2
等的控件,然后在这样的循环中访问它们:
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中的Name
或x: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;
这可以帮助