我正在创建具有按钮的内容,以显示不同的信息。我不想创建很多按钮,但我不知道如何让按钮显示不同的信息。
<Button x:Name="btn1"
Content=""
Click="btn1_Click"/>
<Button x:Name="btn2"
Content=""
Click="btn2_Click"/>
<Button x:Name="btn3"
Content=""
Click="btn3_Click"/>
<Button x:Name="btn4"
Content=""
Click="btn4_Click"/>
<Button x:Name="btn5"
Content=""
Visibility="Hidden"
Click="btn5_Click"/>
<Button x:Name="btn6"
Content=""
Visibility="Hidden"
Click="btn6_Click"/>
<Button x:Name="btnBack"
Content="Return to Main Menu"
Visibility="Hidden"
Click="btnBack_Click"/>
如果您点击主菜单中的btn1
并再次点击它会显示信息,但点击主菜单中的btn2
并点击btn1
后,它会显示不同的信息。我不知道我怎么能做到这一点,到目前为止我没有找到任何帮助我。
答案 0 :(得分:1)
任何带有一堆手工制作的通用控件的东西在WPF中都有一股气味,你的情况也不例外。这可能听起来很糟糕,但实际上在WPF方面是非常好的。为什么?因为这意味着你可以学习WPF的动态,并希望学会如何克服气味(至少在这种情况下)。
免责声明: 这些部分和想法都在这里,但不需要制作完整的解决方案,实际上可能阻碍学习过程。
你显然有一些动态按钮,你想控制可见性,功能和显示。如果我们尝试使用已经创建的按钮来执行这些操作,它会很快变得讨厌和肮脏。那么我们该怎么办?好吧,让我们创建一个小类来保存我们的一些按钮信息。
public class MyButton : INotifyPropertyChanged
{
//Assume all properties did change notifications
public string Text { get; set; }
public ICommand Command { get; set; }
public Visibility Visibility { get; set; }
}
现在让我们假设您在ViewModel或Window本身中都有ObservableCollection
个这些按钮。
你可能会想,“好吧,那太好了,但是我仍然需要将所有这些都绑定到我拥有的按钮上。”你错了!
WPF有很多容器。其中一个是ItemsControl
。有了这个,我们可以收集MyButton
的集合,让它为我们完成所有的工作。你能品尝一下清洁度吗?好吃不是吗?
<ItemsControl Items="{Binding YourCollectionOfMyButton}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Text}"
Command="{Binding Command}"
Visibility="{Binding Visibility}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
现在有一些UI工作要做,让它看起来很漂亮,但你去了。现在,无论你使用什么按钮都没关系,除了更新该集合之外,你不需要做任何工作。
您希望如何处理管理该集合中的按钮取决于您,但确实知道您不再需要通过箍来管理硬编码的X
个按钮。您可以清除该集合,添加1个MyButton并完成它。需要加30?你可以!
答案 1 :(得分:0)
你可以做这样的事情
switch (btn.Text)
{
case "first":
btn.Text="second";
break;
case "second":
btn.Text="third";
break;
}
答案 2 :(得分:0)
也许你可以利用enum 来获得优势。
一个例子是:
public enum Action
{
Button1_Action1,
Button1_Action2
}
// In your form/window
private Action _currentAction = Action.Button1_Action1;
// After you click btn2
_currentAction = Action.Button1_Action2;
// After you click btn1
switch (_currentAction)
{
case Action.Button1_Action1:
// Do something
break;
case Action.Button1_Action2:
// Do something else
break;
}
希望这会给你一个想法:)