1

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

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

我尝试过的:
保存 WPF 应用程序页面的状态。这正是我想要的,但问题是它保存了应用程序的状态并加载了,但是你不能在加载的应用程序中做任何事情,添加和删除都不起作用。它只是加载应用程序,仅此而已。

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

我检查了保存设置方法,但由于 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);
        }
    }
}
}
4

0 回答 0