正在加载 XAML 并正确显示
Loading XAML and displaying it properly
我可以保存 Xaml 数据然后再次加载它,但是它也没有像我希望的那样显示,这是加载保存的数据之前的样子 Before loading saved data However after loading all of the buttons disappear After loading 我会喜欢将按钮保留在原处,只将保存的数据加载到其分配的 space 中。以下是代码,如有帮助将不胜感激。
public MainWindow()
{
InitializeComponent();
}
// button and code to save canvas
public void Button_Click(object sender, RoutedEventArgs e)
{
string savedCanvas = XamlWriter.Save(cnv);
File.WriteAllText("canvas.xaml", savedCanvas);
}
// button and code for loading canvas
void Button_Click_1(object sender, RoutedEventArgs e)
{
var savedCanvas = File.ReadAllText("canvas.xaml");
StringReader stringReader = new StringReader(savedCanvas);
XmlReader xmlReader = XmlReader.Create(stringReader);
Canvas readerLoadCanvas = (Canvas)XamlReader.Load(xmlReader);
Content = readerLoadCanvas;
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
Block b = new Block();
hor.Children.Add(b);
}
欢迎来到 SO!从您提供的代码来看,罪魁祸首是这一行:
Content = readerLoadCanvas;
您在这里所做的是用 canvas.xaml 代码替换 MainWindow 的整个“内容”,因此它将替换所有按钮以及原始 canvas。因为我看不到您的 xaml 代码(尚未发布),所以我无法判断您的 Canvas 所在的容器(即 Grid、StackPanel 等)。
但是,如果我假设您将 Canvas 放在一个网格中,那么我可以给您一个答案。示例:
<Grid x:Name="mainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="PanelOfButtons">
<Button Content="Load" .../>
<Button Content="Save" .../>
</StackPanel>
<Canvas x:Name="cnv" Grid.Column="1" Background="Green">
答案是用这个替换有问题的行,用新的 canvas:
替换 canvas
// Remove the original canvas
mainGrid.Children.Remove(cnv);
// Add the new canvas
mainGrid.Children.Add(readerLoadCanvas);
我可以保存 Xaml 数据然后再次加载它,但是它也没有像我希望的那样显示,这是加载保存的数据之前的样子 Before loading saved data However after loading all of the buttons disappear After loading 我会喜欢将按钮保留在原处,只将保存的数据加载到其分配的 space 中。以下是代码,如有帮助将不胜感激。
public MainWindow()
{
InitializeComponent();
}
// button and code to save canvas
public void Button_Click(object sender, RoutedEventArgs e)
{
string savedCanvas = XamlWriter.Save(cnv);
File.WriteAllText("canvas.xaml", savedCanvas);
}
// button and code for loading canvas
void Button_Click_1(object sender, RoutedEventArgs e)
{
var savedCanvas = File.ReadAllText("canvas.xaml");
StringReader stringReader = new StringReader(savedCanvas);
XmlReader xmlReader = XmlReader.Create(stringReader);
Canvas readerLoadCanvas = (Canvas)XamlReader.Load(xmlReader);
Content = readerLoadCanvas;
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
Block b = new Block();
hor.Children.Add(b);
}
欢迎来到 SO!从您提供的代码来看,罪魁祸首是这一行:
Content = readerLoadCanvas;
您在这里所做的是用 canvas.xaml 代码替换 MainWindow 的整个“内容”,因此它将替换所有按钮以及原始 canvas。因为我看不到您的 xaml 代码(尚未发布),所以我无法判断您的 Canvas 所在的容器(即 Grid、StackPanel 等)。
但是,如果我假设您将 Canvas 放在一个网格中,那么我可以给您一个答案。示例:
<Grid x:Name="mainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="PanelOfButtons">
<Button Content="Load" .../>
<Button Content="Save" .../>
</StackPanel>
<Canvas x:Name="cnv" Grid.Column="1" Background="Green">
答案是用这个替换有问题的行,用新的 canvas:
替换 canvas // Remove the original canvas
mainGrid.Children.Remove(cnv);
// Add the new canvas
mainGrid.Children.Add(readerLoadCanvas);