在启动WPF应用程序

时间:2016-05-24 21:10:00

标签: c# wpf loading savestate dynamic-ui

我的应用程序(测试应用程序)做了什么:
它是动态创建UI的WPF应用程序。
首先它加载一个窗口,主窗口只有一个按钮,添加。
然后用户可以添加一个组件,即Usercontrol。每次创建添加按钮时,寡妇都会添加一个新组件,每个组件都有一个删除按钮。

我想做什么:
用户添加和删除任意数量的用户控制组件后,他可以关闭程序,然后在再次加载程序(重新启动)后,必须加载以前添加的组件并能够继续添加/删除

我试过的是什么:
Saving the State of a WPF Application Page 。这正是我想要的,但问题是它保存了应用程序的状态并加载了,但是然后你无法在加载的应用程序中做任何事情,添加和删除都不起作用。它只是加载应用程序即可。

我该如何解决这个问题?有没有办法让按钮可以点击或这种方法是只读的?如果是这样如何实现这一目标?

我检查了保存设置方法,但由于动态添加了UI元素,因此无法实现。 (右?)

添加的组件

namespace WpfTest
{
/// <summary>
/// Interaction logic for UCTest.xaml
/// </summary>
public partial class UCTest : UserControl
{
    public UCTest()
    {
        InitializeComponent();
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        removethis((StackPanel)this.Parent);
    }

    void removethis(StackPanel g) {

        g.Children.Remove(this);
    }

    public string setText
    {
        get
        {
            return this.textBlock.Text;
        }

        set
        {
            this.textBlock.Text = value;
        }

    }


}
}

主窗口

namespace WpfTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    ObservableCollection<UCTest> oc;

    public MainWindow()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(MainWindow_Loaded);
        Closing += new CancelEventHandler(MainWindow_Closing);

    }
    int cnt;
    private void button_Click(object sender, RoutedEventArgs e)
    {

        sub1.Children.Add(new UCTest() { setText=Convert.ToString(cnt++)});
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        LoadExternalXaml();
    }

    void MainWindow_Closing(object sender, CancelEventArgs e)
    {
        SaveExternalXaml();
    }

    public void LoadExternalXaml()
    {
        if (File.Exists(@"D:\Test.xaml"))
        {
            using (FileStream stream = new FileStream(@"D:\Test.xaml", FileMode.Open))
            {
                this.Content = XamlReader.Load(stream);
            }
        }
    }

    public void SaveExternalXaml()
    {
        using (FileStream stream = new FileStream(@"D:\Test.xaml", FileMode.Create))
        {
            XamlWriter.Save(this.Content, stream);
        }
    }
}
}

0 个答案:

没有答案