基本上我有三个空插槽。
这三个位代表游戏的三个选定项目。
当我点击其中一个空框时,我想显示这个弹出框,其中包含所有项目和一些复选框的集合,用户可以选择某些过滤器并过滤掉项目。
构建这样的“窗口”对我来说并不难,我弄清楚窗口应该如何与主窗口相关存在。
我应该将这个新弹出窗口放在新的Window
中并在用户点击时显示,然后点击该项目,将所选项目发送回主窗口事件吗?
你会怎么做?我对WPF不熟悉并希望得到一些反馈。
答案 0 :(得分:2)
您可以使用流程设计而不是弹出窗口。
屏幕1
用户单击其中一个插槽以查看更多信息或为该插槽添加过滤器选项。单击插槽可打开Screen2。
屏幕2
在该屏幕中,用户可以过滤他想要的项目。主动插槽(正在编辑的插槽)在左侧突出显示。还可以显示有关所选项目的更多信息。在应用和取消(后退)按钮的底部。如果用户取消而未保存/应用,则可以显示提示。
您可以应用WPF Styles和Animations,以使您的应用程序更具视觉吸引力。
答案 1 :(得分:0)
您可以做的是打开另一个窗口作为新表单,并使用方法ShowDialog()
而不是Show()
。通过这种方式,您将能够使用窗口的DialogResult
来了解用户是否取消或选择了某个项目,并且您可以在此窗口中创建一个方法来获取所需的值。
frmList frmPopup = new frmList();
DialogResult response = frmPopup.ShowDialog(); //Execution of this method stops until you close frmPopup
if(response == DialogResult.Ok) //Make sure you set the DialogResult value in your form when you are closing correctly
{
frmPopup.getValue(); //Method of the window that would return the value you're looking for
}
答案 2 :(得分:0)
假设您已经使用“弹出窗口”标记了此问题,则需要一个对话框,您可以在框中为click事件创建事件处理程序,如下所示:
private void On_BoxClicked(sender object, EventArgs e)
{
PopUpBox dialog = new PopUpBox();
var result = PopUpBox.ShowDialog();
if (result == true)
{
//process the result here accessing the properties that
//are needed through the dialog object.
}
}
您需要将表单的DialogResult
设置为true。我通常只为你想要返回的按钮添加OnClick
事件,并关闭以下内容:
this.DialogResult = true;
有关自定义对话框表单的详细信息,请参阅:Custom Dialog Boxes
更复杂的方法是使用每个框的参数向表单添加命令。添加项目的实际处理代码或多或少相同,但它确实添加了某些功能(例如禁用click事件,除非满足某些条件 - 在CanExecute
方法中定义):
//the custom command
public static RoutedCommand AddToBox = new RoutedCommand();
//add the can execute method
private void AddToBox_CanExecute(sender object, CanExecuteRoutedEventArgs e)
{
//assuming that this can always execute
e.CanExecute = true;
}
//Executing the command when the button is clicked
//Show the dialog box and get the response
private void AddToBox_Executed(sender object, ExecutedRoutedEventArgs e)
{
PopUpBox dialog = new PopUpBox();
var result = dialog.ShowDialog();
if (result == true)
{
string box = e.Parameter;
//get the result of the dialog where GetResult() is the
//method that returns the necessary information.
//here set to object for the sake of example
object[] obj = dialog.GetResult()
switch (box)
{
case "box1":
//put value into box 1
case "box2":
//put value into box 2
case "box3":
//put value into box 3
}
}
}
要使用该命令,请添加对该命令的引用。首先,您需要添加对命名空间的引用,假设此命令包含在Example.Window1
中:
<Window ...
xmlns:cmd="clr:NameSpace:Example" ... />
然后添加命令绑定
<Window.CommandBindings>
<CommandBinding Command="{x:Static cmd:Window1.AddToBox}"
CanExecute="AddToBox_CanExecute" Executed="AddToBox_Executed" />
</Window.CommandBindings>
最后,将命令和参数添加到XAML
,例如:
<Button Name="Box1"
Command="{x:Static cmd:Window1.AddToBox}"
CommandParameter="Box1" />
有关WPF中自定义路由命令的详细信息,请参阅:RoutedCommand Class