簡體   English   中英

如何在UWP中使用C#中的字符串名稱更改xaml按鈕屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM