我的应用程序(测试应用程序)做什么:
它是动态创建 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);
}
}
}
}