如何使用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?
        }
    }
}

正如你所看到的,我很容易更改作为发件人的按钮的属性,因为我已经将其转换为我可以使用的按钮类型。对我来说,问题是当我对一个不是发送者的按钮进行操作时,我所拥有的只是它的字符串名称。

如何使用xaml按钮更改属性';s来自UWP中c#的字符串名称

如果使用默认属性,则不必创建新类(除非是您的要求)。

使您的按钮列表全局

列表<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.
        }
    }
}

单击事件将返回您所单击的按钮。

希望这能有所帮助。