[英]How to change a xaml button property using it's string name from c# in UWP?
來自Python的相對noob試圖在c#和XAML中構建UWP應用。
簡短版本:如何使用按鈕的字符串“名稱”引用按鈕來更改其顏色。 看來,如果我給它起了一個名字,我應該能夠用它的名字來引用它,例如:
"navBtn5".Background = myColor;
//or
navBtn5.Background = myColor;
我到處都是,我發現最好的就是從這里在stackOverflow上: 如何從WPF中的C#控制xaml按鈕
看起來和我想要的完全一樣。 但是,這不起作用,甚至不會像我剛剛告訴我的那樣建立:
錯誤CS0103名稱'navBtn5'在當前上下文中不存在
這可能是因為我使用的是UWP,而那是WPF的。
較長的版本:我的應用程序通過將數據綁定到一個List來創建導航菜單,該List放在一個單獨的類中。 我在類中創建一種MenuButton,然后返回它們的列表。 這是我的課程的精簡版本:
class MenuButton{
public string buttonName { get; set; }
public string buttonContentText { get; set; }
public int buttonWidth { get; set; }
public int buttonHeight { get; set; }
public List<byte> buttonColor { get; set; }
}
class menuButtonManager{
public static List<MenuButton> getButtons(){
var menuButtons = new List<MenuButton>();
menuButtons.Add(new MenuButton{
buttonName = "navBtn1",
buttonWidth = 50,
buttonHeight = 50,
buttonContentText = "\uE173",
buttonColor = new List<byte> { 255, 82, 190, 128 },
});
menuButtons.Add(new MenuButton{
buttonName = "navBtn2",
//and so on
});
menuButtons.Add(new MenuButton{
//and so on
});
}
return menuButtons;
}
在運行時,當用戶單擊一個按鈕時,我要遍歷列表中的所有按鈕,如果不是單擊的則將其顏色更改為灰色,如果單擊的則將其顏色更改為綠色。 像這樣的東西:
private void navClick(object sender, RoutedEventArgs e){
//who called me
string senderName = ((Button)sender).Name;
foreach(MenuButton m in menuButtons){
if(m.buttonName == senderName){
Button senderButton = (Button)sender;
senderButton.Background = myFunkyColor;
// I can already do this as I already have
// the sender cast to a button
}
else{
// change button to grey
// This is where I am stuck
// I know m.buttonName as a string
// how do I create a usable button object from it?
}
}
}
如您所見,在將發送方的按鈕屬性轉換為我可以使用的Button類型時,我可以毫不費力地更改按鈕的屬性。 對我來說,問題是當我操作不是發件人的按鈕,而我所擁有的只是字符串名稱。
如果使用默認屬性,則不必創建新類(除非您有此要求)。
使您的按鈕列表全局
List <Button> menuButtons =新的List <Button>();
public static List<Button> getButtons()
{
for ( int i=0; i<5; i++)
{
Button _button = new Button
{
Name = "navBtn" + i.ToString(),
Width = 50,
Height = 50,
Content = "\uE173",
Background = new SolidColorBrush(Colors.Gray)
};
_button.Click += _button_Click;
menuButtons.Add(_button);
}
return menuButtons;
}
上面將返回5個新按鈕(類似您的要求)。 看着
_button.Click + = _button_Click;
將為列表中的每個按鈕顯式創建一個單擊事件。
private static void _button_Click(object sender, RoutedEventArgs e)
{
Button Clicked = (Button)sender;
foreach(Button btn in menuButtons)
{
if (Clicked.Name == btn.Name)
{
btn.Background = myFunkyColour;
}
else
{
btn.Background = //Your Disabled Colour.
}
}
}
單擊事件將返回您單擊的按鈕。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.