如何使用xaml按钮更改属性';s来自UWP中c#的字符串名称
本文关键字:UWP 来自 字符串 按钮 xaml 何使用 属性 | 更新日期: 2023-09-27 17:57:36
这里的相对noob来自Python试图在c#和XAML中构建UWP应用程序。
简短版本:如何使用字符串"Name"来引用按钮以更改其颜色。似乎如果我给它起了一个名字,我应该可以用它的名字来称呼它,比如:
"navBtn5".Background = myColor;
//or
navBtn5.Background = myColor;
我到处看了看,我在stackOverflow上找到的最好的是这个:如何在WPF 中从C#控制xaml按钮
看起来和我想要的一模一样。然而,这不起作用,甚至不会像我刚刚被告知的那样构建:
错误CS0103当前上下文中不存在名称"navBtn5"
这可能是因为我正在使用UWP,这是为了WPF。
长版本:我的应用程序通过数据绑定到一个列表来创建导航菜单,该列表放在一个单独的类中。我正在类中创建一种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>menuButtons=新列表<按钮>();
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;
将为列表中的每个按钮显式创建用于单击的事件。
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.
}
}
}
单击事件将返回您所单击的按钮。
希望这能有所帮助。