我希望能夠通過字符串中的文本引用C#中的WPF元素。類似這樣的:我可以通過字符串引用WPF元素嗎?
SelectElementFromString("TestButton").Opacity = 1;
我可以這樣做嗎?
我希望能夠通過字符串中的文本引用C#中的WPF元素。類似這樣的:我可以通過字符串引用WPF元素嗎?
SelectElementFromString("TestButton").Opacity = 1;
我可以這樣做嗎?
你真的需要?不知何故,我懷疑它。如何:
XAML:
<SomeType Name="_SomeControl" .../>
代碼:
_SomeControl.SomeMethod();
以這種方式使用的字符串是幾乎總是一個壞主意,只會讓你的代碼脆弱(我說差不多,因爲有一些有效的原因,它們只是不常見)。另外,爲什麼你的方法返回一個字符串?
編輯:基於您的評論在這裏我建議您只需使用一個集合通過你的控制迭代:
我會使用,但它是一個痛苦的去[blah0.Property =真;等等=真...]有沒有這樣的一些解決方案,我失蹤
幾乎每個初學者程序員都想這樣做(包括我自己幾年前)。創建一堆名字類似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,但可能不利於未來的人搜索這個論壇究竟是誰需要一個直接的答案。所以,這裏是喬恩的答案的轉貼(感謝,將引發你一些代表,如果我能= d)
您可以搜索一個FrameworkElement的的子控件與FindName。要設置控件的名稱,請使用XAML中的Name或x:Name屬性。
注意:如果您使用x:Name,則該控件也將作爲FrameworkElement的代碼隱藏字段提供,您將可以直接訪問它。
我會使用它,但這是一個痛苦[blah0.Property = true; blah 1.Property = true ...] 有沒有一些解決方案,我失蹤了? – awesomeguy 2011-03-25 03:04:58
然後使用一個集合。將所有控件放在集合中並遍歷它們。 – 2011-03-25 03:05:27
好的,但這是將控件添加到列表的唯一方法,還是有更自動化的方式? – awesomeguy 2011-03-25 03:13:16
FrameworkElement.FindName會引導你在正確的方向...
您可以使用FindName
來搜索FrameworkElement
的子控件。要設置控件的名稱,請使用XAML的Name
或x:Name
屬性。
注意:如果您使用x:Name
,該控件也將作爲FrameworkElement
的代碼隱藏字段提供,您將可以直接訪問它。
string indx ="textbox1";
var txt= layout.FindName(indx);
TextBox sometxt= txt as TextBox;
sometxt.Opacity = 1;
這將有助於
你的問題和示例代碼是相當模糊的。將選擇什麼樣的元素? – BoltClock 2011-03-25 02:58:27
爲什麼該方法返回一個字符串? – 2011-03-25 03:04:08