有沒有辦法在c#中編寫多個項目的一個屬性。例如我有5個按鈕,我不想寫button1.text = "etc"
,button2.text = "etc
,我想寫button.text="etc"
,並有button1.text通過button5.text來具有「等」文本。多個按鈕的一個屬性
回答
你必須迭代所說的集合,否則就會起作用。 – BradleyDotNET 2014-09-05 21:59:01
您不能將所有5個按鈕分配給相同的參考,以便button.text = "etc"
可以工作。
但是,您可以綁定按鈕相同的屬性:
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
如果與INotifyPropertyChanged
正確設置綁定,那麼一切都將更新時myText
被更新。
您也可以將控件放入一個集合中,然後按照其他人的建議設置他們的Content
屬性。
+1沒有想到使用綁定。 – 2014-09-05 22:11:18
我想這是類似的東西是可行的:
public void SetButtonText(string value) {
this.Controls.OfType<Button>().ToList().ForEach(b => b.Text = value);
}
或者通過屬性相同:
public string ButtonText {
set {
Controls
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
編輯
進一步研究之後,我發現了據我所知,沒有直接的方法可以訪問Windows Phone中的頁面控件。所以這一切都取決於你是否希望從PhoneApplicationPage:
正如我所看到的,你的解決方案圍繞着Page.LogicalChildren Property。
public class MyPage : Page {
public string ButtonText {
set {
LogicalChildren
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
}
由於LogicalChildren
有一個受保護的訪問,你需要通過一個派生類,它應便於任何一種你在Windows Phone上的工作頁面的訪問它,我猜。
或者將Grid右移到PhoneApplicationPage
上,然後放下其他控件(如按鈕),然後通過Grid.Children屬性訪問它們。
因此,已經下降了您的Grid
並將其命名爲myBaseGrid
,一會做到以下幾點:
public void SetButtonsText(string text) {
myBaseGrid.Children
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = "myText");
}
我會親自去與這名使得該方法你被拼寫的單詞Button
做清楚什麼複數如我的樣本。
+1爲「一條線」的做法。從電話8開始,它可能是'Children'而不是'Controls'',但 – BradleyDotNET 2014-09-05 21:59:58
@BradleyDotNET:請參閱我的編輯。 – 2014-09-05 22:47:47
感謝您的信息!我很驚訝他們擺脫了'Children'集合,並用'LogicalChildren'取代了它。無論如何,如果出於某種原因,綁定不是一個選項,我仍然會使用這種方法。 – BradleyDotNET 2014-09-05 22:50:04
一個方法是創建一個集所有這些爲你的方法,你必須手動編寫一次:
public void SetAllButtonTexts(string text)
{
button1.text = text;
button2.text = text;
// . . .
}
另外,您可以使用一個循環:
public void SetAllButtonTexts(string btnText)
{
foreach (var control in this.Controls.OfType<Button>())
{
(control).Text = btnText;
}
}
而且如果你不想更新所有的按鈕,你可以做的一件簡單但不那麼優雅的事情是修改你想用某些自定義文本更改的按鈕的Tag
屬性,並且只更新那些:
public void SetAllButtonTexts(string btnText, string tagText = "")
{
foreach (var control in this.Controls.OfType<Button>()
.Where(b => string.IsNullOrEmpty(tagText)
|| (b.Tag != null && b.Tag.Equals(tagText))))
{
(control).Text = btnText;
}
}
+1或者和我的答案一樣,除了'foreach loop'語法。它應該工作。 – 2014-09-05 22:10:52
True ...在我發佈之前,我沒有看到您的答案。偉大的思想......:p – 2014-09-05 22:18:10
嘿嘿嘿......我知道有時候在答案上會有一些併發。當我發佈我的時候,你可能正在寫你的。 ;)偉大的思想仍然! = P – 2014-09-05 22:19:38
簡而言之:將所有應該在列表中更改的按鈕分組。然後稍後循環訪問此列表並設置所有按鈕的文本。
這是一些代碼。
首先:
public static List<Button> buttonList = new List<Button>{};
上的Form_Load:
buttonList.AddRange(new List<Button>{ button1,button2,button3,...}); // Group your buttons
現在這取決於 '當' 或 '地方' 你想改變它。如果按鈕在開始時應該正確更改,請將以下代碼放入form_load事件中。否則,當它應該被解僱時,將其放入事件中。
foreach(Button btn in buttonList)
{
btn.Text = "Change all button-texts from list at one time.";
}
你也可以像這樣處理多個標籤或盒子等。只需聲明正確的數據類型即可。
問候
- 1. 喜歡多個屬性,只需一個Like按鈕
- 2. 一個OnClickHandler多個按鈕
- 3. 多個屬性在一個?
- 4. 獲得一個屬性當我點擊一個按鈕
- 5. 多個按鈕,但一次只能按一個按鈕
- 6. 作爲一個iOS的多個按鈕
- 7. 一個按鈕的多個動作
- 8. 一個表格上的多個按鈕
- 9. 在ViewModel中控制多個按鈕的屬性
- 10. 使用按鈕更改多個控件的背景屬性
- 11. 同時修改多個按鈕的屬性
- 12. 具有相同屬性的多個按鈕
- 13. 如何使用Foreach更改WP7中多個按鈕的屬性?
- 14. 更改按鈕上圖像的多個屬性單擊
- 15. 維護一個按多個屬性排序的列表?
- 16. 切換多個按鈕的可見性
- 17. 多個按鈕按
- 18. 一個weka屬性的多個值
- 19. 搜索多個屬性的一個值
- 20. 一個屬性的多個字段
- 21. 多個按鈕
- 22. 多個按鈕
- 23. 多個按鈕
- 24. 多個按鈕?
- 25. CSS:一個屬性多類
- 26. 只做一些代碼,而一個按鈕有一個特定的值屬性
- 27. 在一個按鈕上單擊一個按鈕的多個功能
- 28. 多個屬性
- 29. 多個屬性
- 30. 用單選按鈕指定多個屬性
您可以創建一個數組。 – SLaks 2014-09-05 21:53:00
如果答案正確並解決了您的問題,請接受您選擇的答案,以便其他有相同問題的社區成員知道您的工作方式。 – 2014-09-06 12:22:32