2011-03-25 69 views
2

我希望能夠通過字符串中的文本引用C#中的WPF元素。類似這樣的:我可以通過字符串引用WPF元素嗎?

SelectElementFromString("TestButton").Opacity = 1; 

我可以這樣做嗎?

+0

你的問題和示例代碼是相當模糊的。將選擇什麼樣的元素? – BoltClock 2011-03-25 02:58:27

+1

爲什麼該方法返回一個字符串? – 2011-03-25 03:04:08

回答

3

你真的需要?不知何故,我懷疑它。如何:

XAML:


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

代碼:


_SomeControl.SomeMethod(); 

以這種方式使用的字符串是幾乎總是一個壞主意,只會讓你的代碼脆弱(我說差不多,因爲有一些有效的原因,它們只是不常見)。另外,爲什麼你的方法返回一個字符串?

編輯:基於您的評論在這裏我建議您只需使用一個集合通過你的控制迭代:

我會使用,但它是一個痛苦的去[blah0.Property =真;等等=真...]有沒有這樣的一些解決方案,我失蹤

幾乎每個初學者程序員都想這樣做(包括我自己幾年前)。創建一堆名字類似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,但可能不利於未來的人搜索這個論壇究竟是誰需要一個直接的答案。所以,這裏是喬恩的答案的轉貼(感謝,將引發你一些代表,如果我能= d)

您可以搜索一個FrameworkElement的的子控件與FindName。要設置控件的名稱,請使用XAML中的Name或x:Name屬性。

注意:如果您使用x:Name,則該控件也將作爲FrameworkElement的代碼隱藏字段提供,您將可以直接訪問它。

+0

我會使用它,但這是一個痛苦[blah0.Property = true; blah 1.Property = true ...] 有沒有一些解決方案,我失蹤了? – awesomeguy 2011-03-25 03:04:58

+1

然後使用一個集合。將所有控件放在集合中並遍歷它們。 – 2011-03-25 03:05:27

+0

好的,但這是將控件添加到列表的唯一方法,還是有更自動化的方式? – awesomeguy 2011-03-25 03:13:16

1

FrameworkElement.FindName會引導你在正確的方向...​​

4

您可以使用FindName來搜索FrameworkElement的子控件。要設置控件的名稱,請使用XAML的Namex:Name屬性。

注意:如果您使用x:Name,該控件也將作爲FrameworkElement的代碼隱藏字段提供,您將可以直接訪問它。

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

這將有助於

相關問題