多个按钮的一个属性

时间:2014-09-05 21:49:51

标签: c# button windows-phone-8

有没有办法在c#one属性中写入多个项目。例如我有5个按钮,我不想写button1.text = "etc"button2.text = "etc,我想写button.text="etc"并通过button1.text通过button1.text来获得“etc”文本。< / p>

5 个答案:

答案 0 :(得分:2)

我认为这类似于以下内容是可行的:

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 :(得分:1)

答案 2 :(得分:1)

您无法将所有5个按钮分配到同一参考,以便button.text = "etc"可以使用。

但是,您可以将按钮绑定到同一属性:

<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>

如果使用INotifyPropertyChanged正确设置了绑定,则更新myText时所有绑定都会更新。

您还可以将控件放入一个集合中,并按照其他人的建议设置其Content属性。

答案 3 :(得分:1)

一种方法是创建一个为您设置所有内容的方法,您必须手动编写一次:

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;
    }
}

答案 4 :(得分:0)

简而言之:将所有按钮分组,这些按钮应在列表中更改。然后循环浏览此列表并设置所有按钮的文本。

这里有一些代码。
首先:

public static List<Button> buttonList = new List<Button>{};

在form_load上:

buttonList.AddRange(new List<Button>{ button1,button2,button3,...}); // Group your buttons

现在它取决于&#39;何时&#39;或者&#39;其中&#39;你想改变它。如果应该在开头右侧更改按钮,请将以下代码放入form_load-event。否则,应该在事件中触发它,将其置于事件中。

foreach(Button btn in buttonList)
{
    btn.Text = "Change all button-texts from list at one time.";
}

你也可以像这样处理多个标签或盒子等。只需声明正确的数据类型。

问候