实现选项对话框

时间:2015-04-21 12:07:58

标签: c# wpf

在我的应用程序中,如果你转到菜单栏中的工具 - >选项,我想在VisualStudios中实现一个选项对话框。我怎样才能做到这一点?我的第一个想法是使用页面和导航,但也许这是一种更简单的方法?

3 个答案:

答案 0 :(得分:0)

您应创建一个新窗口并显示该窗口,而不是创建页面并导航到该窗口。然后,您可以在新窗口中调用.show()以显示它。

然后,您可以根据需要更改新窗口的外观,与编辑页面相同。

Add New Item Window

答案 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并玩游戏。玩得开心! :)

相关问题