在我的应用程序中,如果你转到菜单栏中的工具 - >选项,我想在VisualStudios中实现一个选项对话框。我怎样才能做到这一点?我的第一个想法是使用页面和导航,但也许这是一种更简单的方法?
答案 0 :(得分:0)
您应创建一个新窗口并显示该窗口,而不是创建页面并导航到该窗口。然后,您可以在新窗口中调用.show()
以显示它。
然后,您可以根据需要更改新窗口的外观,与编辑页面相同。
答案 1 :(得分:0)
如果将选项构建为与选项窗口的结构匹配的完整对象模型,那么最好的方法是使用MVVM工具包使用的任何导航感知UI绑定。选项窗口将作为新的根级窗口开始,您将绑定选项数据模型的根目录。
因此,简而言之,将选项对话框视为一个迷你应用程序,它使用与主MVVM应用程序相同的结构,但使用不同的数据模型根。
如果您打算允许用户取消对选项的更改,那么您希望您的选项数据模型可以克隆,以便您可以使用克隆填充选项窗口,然后用新的替换实际选项如果用户在选项窗口上按OK,则显示数据。如果他们选择取消,你可以将克隆的对象扔掉并摧毁窗口。
答案 2 :(得分:0)
这可能不是最简单的方式,但我写的这个代码段符合你的目标,这是一个很好的练习。
在空的Windows窗体项目中添加ListBox(listBox1)和Panel(panel1)。然后创建2个UserControls(UserControl1和UserControl2),这些将是您单击列表时显示的内容。
在您的Form1类中,我们创建了一个ListItem
类,其中包含您的菜单选项:
public partial class Form1 : Form
{
public class ListItem
{
public string Text { get; set; }
public UserControl Value { get; set; }
public ListItem(string text, UserControl value)
{
Text = text;
Value = value;
}
};
...
}
之后,在Form1中的InitializeComponent()之后立即将项添加到ListBox:
public Form1()
{
InitializeComponent();
listBox1.DisplayMember = "Text";
listBox1.ValueMember = "Value";
listBox1.Items.Add(new ListItem("Item1", new UserControl1()));
listBox1.Items.Add(new ListItem("Item2", new UserControl2()));
}
当你使用listBox1.SelectedItem时,它会返回一个对象,你可以将它转换为ListItem并访问相关的UserControl。
要使用此行为,请转到designmode并双击ListBox,这将为SelectedIndexChanged
事件添加代码。我们使用此事件在Panel panel1
中显示UserControl。这将清除任何旧的Panel内容并添加选定的UserControl:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
panel1.Controls.Clear();
UserControl control = (listBox1.SelectedItem as ListItem).Value;
if(control != null)
{
panel1.Controls.Add(control);
control.Dock = DockStyle.Fill;
}
}
我建议你尝试添加一个按钮或其他东西来区分UserControls并玩游戏。玩得开心! :)