永久保存运行时完成的操作



我已经让我的程序运行并做它应该做的事情,但它当然不会保存运行时创建的东西。我该怎么做?是否可以将Gamebutton方法放入文件中并在每次加载程序时调用该文件?我该怎么做呢?

XAML.cs

public void Gamebutton()
{           
// Button to start a Game
DockPanel panel = new DockPanel();
main_panel.Children.Add(panel);
Button Gamebutton = new Button();
{
Gamebutton.Height = 50;
Gamebutton.Width = 500;
Gamebutton.Content = btname.Text;
Gamebutton.FontSize = 24;
Gamebutton.BorderThickness = new Thickness(0);
Gamebutton.Margin = new Thickness(10, 10, 0, 10);
Gamebutton.Click += Run_Game;
Gamebutton.Tag = btpath.Text;
panel.Children.Add(Gamebutton);              
}
// del Gamebutton
Button Delbutton = new Button();
{
Delbutton.Height = 50;
Delbutton.Content = "X";
Delbutton.FontSize = 24;
Delbutton.BorderThickness = new Thickness(0);
Delbutton.Margin = new Thickness(0, 10, 10, 10);
Delbutton.Click += Del_Gamebutton;
panel.Children.Add(Delbutton);
}
// Contextmenu for Gamebutton
ContextMenu = new ContextMenu();
{
Gamebutton.ContextMenu = ContextMenu;
MenuItem rename = new MenuItem();
rename.Header = "Rename";
rename.Click += Rename;
ContextMenu.Items.Add(rename);
MenuItem Pathd = new MenuItem();
Pathd.Header = "Path D:";
Pathd.Click += Pathdtotag;
ContextMenu.Items.Add(Pathd);
MenuItem Pathe = new MenuItem();
Pathe.Header = "Path E:";
Pathe.Click += Pathetotag;
ContextMenu.Items.Add(Pathe);
MenuItem del = new MenuItem();
del.Header = "Delete";
del.Click += Del_Gamebutton;
ContextMenu.Items.Add(del);
}
// redefinds Gamepath E: via Contextmenu
void Pathetotag(object sender, EventArgs e)
{
OpenFileDialog Pathpick = new OpenFileDialog();
Pathpick.InitialDirectory = @"E:Games";
Pathpick.ShowDialog();
Gamebutton.Tag = Pathpick.FileName;
}
// redefinds Gamepath D: via Contextmenu
void Pathdtotag(object sender, EventArgs e)
{
OpenFileDialog Pathpick = new OpenFileDialog();
Pathpick.InitialDirectory = @"D:Games";
Pathpick.ShowDialog();
Gamebutton.Tag = Pathpick.FileName;
}
// Renaming Window in Contextmenu
void Rename(object sender, EventArgs e)
{
Window Renamewindow = new Window();
Renamewindow.Name = "Test";
Renamewindow.Width = 250;
Renamewindow.Height = 120;
Renamewindow.Title = "Rename";
Grid renamegrid = new Grid();
Renamewindow.Content = renamegrid;
StackPanel stckpnl = new StackPanel();
renamegrid.Children.Add(stckpnl);
TextBox renametxtbox = new TextBox();
renametxtbox.Height = 20;
renametxtbox.Width = 200;
renametxtbox.HorizontalAlignment = HorizontalAlignment.Center;
renametxtbox.Margin = new Thickness(10, 10, 10, 10);
renametxtbox.KeyDown += Renameevent;                
stckpnl.Children.Add(renametxtbox);
Renamewindow.Show();
renametxtbox.Focus();
}            
// Renames Gamebutton Content via Renaming Window
void Renameevent(object sender, KeyEventArgs e)
{
string renametxt = ((sender as TextBox).Text as String);
if (e.Key == Key.Return)
{
Gamebutton.Content = renametxt;
}
}
// Run Game
void Run_Game(object sender, EventArgs e)
{
string Path = ((sender as Button).Tag as String);
Process Gamestart = new Process();
{
Gamestart.StartInfo.FileName = Path;
if (Path == "") // in case no Path is selected, programm doesnt crash
{
MessageBox.Show("Button has no Path");
}
else
{
Gamestart.Start();
}
}
} 
// del Gamebutton via Contextmenu
void Del_Gamebutton(object sender, EventArgs e)
{
panel.Children.Remove(Gamebutton);
panel.Children.Remove(Delbutton);
}
}

XAML

<Window x:Class="Games_Loader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Games_Loader"
mc:Ignorable="d"
Title="Games Loader" Height="600" Width="800" ResizeMode="NoResize">
<Grid>        
<StackPanel x:Name="menu_panel" HorizontalAlignment="Left" Width="200" Background="LightGray">
<TextBlock>Gamename:</TextBlock>
<TextBox x:Name="btname" Margin="10,10,10,10" KeyDown="Btname_Enter"/>
<TextBlock>Path:</TextBlock>
<TextBox x:Name="btpath" Margin="10,10,10,10"/>
<DockPanel>
<Button Height="40" Width="85" x:Name="btpathclickerd" Click="Btpath_Click_d" Margin="10,10,0,0">Add Path D:</Button>
<Button Height="40" Width="85" x:Name="btpathclickere" Click="Btpath_Click_e" Margin="0,10,0,0">Add Path E:</Button>
</DockPanel>
<Button x:Name="add_game" Height="40" Margin="5,50,5,0" Click="Add_game_Click">Add Game</Button>
</StackPanel>
<ScrollViewer Margin="200,0,0,0" VerticalScrollBarVisibility="Auto" Grid.ColumnSpan="2">
<StackPanel x:Name="main_panel" Background="Gray"/>
</ScrollViewer>
</Grid>

将设置保存到某种对象,然后使用 Json 序列化并在应用退出时将其写入文件。在应用启动时加载和反序列化设置。

最新更新