[英]WPF How to reuse Popup window xaml fragment to show on multiple different button clicks
[英]wpf making the same button show different info after multiple clicks
我正在創建具有按鈕的東西,以顯示不同的信息。 我不想創建很多按鈕,但我不知道如何讓按鈕顯示不同的信息。
<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
,它會顯示不同的信息。 我不知道我怎么能做到這一點,到目前為止我搜索的任何內容都沒有幫助我。
任何帶有手動創建的一堆通用控件的東西在 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嗎? 你可以!
你可以做這樣的事情
switch (btn.Text)
{
case "first":
btn.Text="second";
break;
case "second":
btn.Text="third";
break;
}
也許您可以使用枚舉來發揮自己的優勢。
一個例子是:
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;
}
希望這能給你一個想法:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.