C# 加载按钮会丢失功能

C# 加载按钮会丢失功能,c#,wpf,load,C#,Wpf,Load,编辑:这里是项目本身 我正在从事的项目希望成为一个易于管理的协议创建者。它可以创建动态文本字段。一行用于内容描述,另一行用于内容本身。由于多种原因,第2行有一个按钮可用作交通灯。我现在已经到了“Alpha”完成的时候了,我可以保存所有内容并加载它,但问题是按钮的功能丢失了,我想是因为,他没有保存对事件处理程序的引用 namespace AmpelThingy { public class Load { public void Loading() {

编辑:这里是项目本身

我正在从事的项目希望成为一个易于管理的协议创建者。它可以创建动态文本字段。一行用于内容描述,另一行用于内容本身。由于多种原因,第2行有一个按钮可用作交通灯。我现在已经到了“Alpha”完成的时候了,我可以保存所有内容并加载它,但问题是按钮的功能丢失了,我想是因为,他没有保存对事件处理程序的引用

namespace AmpelThingy
{
    public class Load       
    {

    public void Loading() {
    StreamReader sR = new StreamReader(@"AA.xaml");
    string text = sR.ReadToEnd();
    sR.Close();

    StringReader stringReader = new StringReader(text);
    XmlReader xmlReader = XmlReader.Create(stringReader);

    StackPanel wp = (StackPanel)System.Windows.Markup.XamlReader.Load(xmlReader);

    ((MainWindow)System.Windows.Application.Current.MainWindow).SP2.Children.Clear(); // clear the existing children

    foreach (FrameworkElement child in wp.Children) // and for each child in the WrapPanel we just loaded (wp)
    {
        ((MainWindow)System.Windows.Application.Current.MainWindow).SP2.Children.Add(CloneFrameworkElement(child)); // clone the child and add it to our existing wrap panel
    }           
}

FrameworkElement CloneFrameworkElement(FrameworkElement originalElement)
{
    string elementString = XamlWriter.Save(originalElement);

    StringReader stringReader = new StringReader(elementString);
    XmlReader xmlReader = XmlReader.Create(stringReader);
    FrameworkElement clonedElement = (FrameworkElement)XamlReader.Load(xmlReader);

    return clonedElement;
}
    }
}

namespace AmpelThingy
{
    public class Save
    {

     public void Saving() {   
    StringBuilder outstr = new StringBuilder();

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.OmitXmlDeclaration = true;
    settings.NewLineOnAttributes = true;


    XamlDesignerSerializationManager dsm = new XamlDesignerSerializationManager(XmlWriter.Create(outstr, settings));
    dsm.XamlWriterMode = XamlWriterMode.Expression;
    XamlWriter.Save(((MainWindow)System.Windows.Application.Current.MainWindow).SP2, dsm);
    string savedControls = outstr.ToString();

    File.WriteAllText(@"AA.xaml", savedControls);
     }
    }
}


namespace AmpelThingy
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Background = Brushes.Magenta;
            stackPanel1.Width = Double.NaN;
            stackPanel1.Height = Double.NaN;
            stackPanel2.Width = Double.NaN; ;
            stackPanel2.Height = Double.NaN;
            AddWrapPanelMaster();

        }

        Button AddButtonSlave(Button but)
        {


            but.Click += new RoutedEventHandler(this.buttClickSlave);
            return (but);
        }

        Button AddButtonSlaveAdd(Button but)
        {


            but.Click += new RoutedEventHandler(this.buttClickSlaveAdd);
            return (but);
        }

        Button AddButtonMaster(Button but)
        {


            but.Click += new RoutedEventHandler(this.buttClickMaster);
            return (but);
        }

        void buttClickSlaveAdd(Object sender, EventArgs e)
        {
            TextBox txtB1 = new TextBox();
            txtB1.Background = System.Windows.Media.Brushes.Magenta;
            txtB1.Text = "Text";
            txtB1.Width = 75;
            txtB1.Height = 75;
            Button s = (Button)sender;
            WrapPanel wp = (WrapPanel)s.Parent;
            wp.Children.Remove(s);
            wp.Children.Add(txtB1);
            Button b = new Button();
            b = AddButtonMaster(b);
            b.Content = "Add";
            b.Width = 75;
            wp.Children.Add(b);

            // Add the buttons to the parent WrapPanel using the Children.Add method.


        }

        void buttClickMaster(Object sender, EventArgs e)
        {
           TextBox txtB1 = new TextBox();
            txtB1.Background = System.Windows.Media.Brushes.Magenta;
            txtB1.Text = "Text";
            txtB1.Width = 75;
            txtB1.Height = 75;
            Button s = (Button)sender;
            WrapPanel wp = (WrapPanel)s.Parent;
            wp.Children.Remove(s);
            wp.Children.Add(txtB1);
            Button b = new Button();
            b = AddButtonMaster(b);
            b.Content = "Add";
            b.Width = 75;
            wp.Children.Add(b);

            // Add the buttons to the parent WrapPanel using the Children.Add method.


        }

        public StackPanel SP2
        {
            get { return stackPanel2; }
        }

        void buttClickSlave(Object sender, EventArgs e)
        {

            Button s = (Button)sender;

            if (s.Background != Brushes.Blue && s.Background != Brushes.Red && s.Background != Brushes.Green)
                s.Background = Brushes.Red;
            else
                if (s.Background == Brushes.Green)
                    s.Background = Brushes.Red;
            else
            if (s.Background == Brushes.Blue)
                s.Background = Brushes.Green;
            else
            if (s.Background == Brushes.Red)
                s.Background = Brushes.Blue;

        }

        void AddTextBox(Button sender) {
            TextBox txtB1 = new TextBox();
            txtB1.Text = "Text";
            txtB1.Width = 75;
            txtB1.Height = 75;
            WrapPanel s = (WrapPanel)sender.Parent;
            s.Children.Add(txtB1);

            // Add the buttons to the parent WrapPanel using the Children.Add method. 

        }

        void AddWrapPanelSlave() {

            WrapPanel myWrapPanel = new WrapPanel();
            myWrapPanel.Background = System.Windows.Media.Brushes.Azure;
            myWrapPanel.Orientation = Orientation.Horizontal;
            myWrapPanel.Width = 4000;
            myWrapPanel.HorizontalAlignment = HorizontalAlignment.Left;
            myWrapPanel.VerticalAlignment = VerticalAlignment.Top;


            // Define 3 button elements. The last three buttons are sized at width 
            // of 75, so the forth button wraps to the next line.
            Button btn1 = new Button();
            btn1 = AddButtonSlave(btn1);
            btn1.Content = "Button 1";
            btn1.Width = 75;
            Button btn2 = new Button();
            btn2 = AddButtonSlaveAdd(btn2);
            btn2.Content = "Button 2";
            btn2.Width = 75;

            // Add the buttons to the parent WrapPanel using the Children.Add method.
            myWrapPanel.Children.Add(btn1);
            myWrapPanel.Children.Add(btn2);
            this.stackPanel1.Children.Add(myWrapPanel);
        }

        void AddWrapPanelMaster()
        {

            WrapPanel myWrapPanel = new WrapPanel();

            SolidColorBrush mySolidColorBrush = new SolidColorBrush();
            mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);

            myWrapPanel.Background = System.Windows.Media.Brushes.Magenta;
            myWrapPanel.Orientation = Orientation.Horizontal;
            myWrapPanel.Width = 4000;
            myWrapPanel.HorizontalAlignment = HorizontalAlignment.Left;
            myWrapPanel.VerticalAlignment = VerticalAlignment.Top;


            // Define 3 button elements. The last three buttons are sized at width 
            // of 75, so the forth button wraps to the next line.
            TextBox txtB1 = new TextBox();
            txtB1.Background = System.Windows.Media.Brushes.Magenta;
            txtB1.Text = "Text";
            txtB1.Width = 75;
            txtB1.Height = 75;
            Button btn1 = new Button();
            btn1 = AddButtonMaster(btn1);
            btn1.Content = "Add";
            btn1.Width = 75;

            // Add the buttons to the parent WrapPanel using the Children.Add method.
            myWrapPanel.Children.Add(txtB1);
            myWrapPanel.Children.Add(btn1);
            this.stackPanel2.Children.Add(myWrapPanel);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            AddWrapPanelSlave();
            this.Show();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            Load load = new Load();
            load.Loading();
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            Save save = new Save();
            save.Saving();
        }


    }
}
namespace-AmpelThingy
{
公共类负载
{
公共空荷载(){
StreamReader sR=新的StreamReader(@“AA.xaml”);
string text=sR.ReadToEnd();
高级关闭();
StringReader StringReader=新的StringReader(文本);
XmlReader=XmlReader.Create(stringReader);
StackPanel wp=(StackPanel)System.Windows.Markup.XamlReader.Load(xmlReader);
((MainWindow)System.Windows.Application.Current.MainWindow).SP2.Children.Clear();//清除现有子项
foreach(wp.Children中的FrameworkElement子级)//对于我们刚刚加载的包装内尔(wp)中的每个子级
{
((MainWindow)System.Windows.Application.Current.MainWindow).SP2.Children.Add(CloneFrameworkElement(child));//克隆子对象并将其添加到现有的包装面板中
}           
}
FrameworkElement克隆FrameworkElement(FrameworkElement originalElement)
{
string elementString=XamlWriter.Save(originalElement);
StringReader StringReader=新的StringReader(elementString);
XmlReader=XmlReader.Create(stringReader);
FrameworkElement clonedElement=(FrameworkElement)XamlReader.Load(xmlReader);
返回克隆元素;
}
}
}
名称空间振幅
{
公共类保存
{
公共作废保存(){
StringBuilder outsr=新的StringBuilder();
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
settings.OmitXmlDeclaration=true;
settings.NewLineOnAttributes=true;
XamlDesignerSerializationManager dsm=新的XamlDesignerSerializationManager(XmlWriter.Create(outtr,settings));
dsm.XamlWriterMode=XamlWriterMode.Expression;
XamlWriter.Save(((主窗口)System.Windows.Application.Current.MainWindow.SP2,dsm);
string savedControl=outsr.ToString();
WriteAllText(@“AA.xaml”,savedControl);
}
}
}
名称空间振幅
{
/// 
///Interaktionslogik für MainWindow.xaml
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
this.Background=画笔.Magenta;
stackPanel1.宽度=Double.NaN;
stackPanel1.高度=Double.NaN;
stackPanel2.宽度=Double.NaN;
stackPanel2.高度=Double.NaN;
AddWrapPanelMaster();
}
按钮AddButtonSlave(按钮但不可用)
{
但是.Click+=newroutedeventhandler(这个.buttclicksslave);
返回(但是);
}
按钮添加按钮添加(按钮但)
{
但是.Click+=newroutedeventhandler(这个.buttClickSlaveAdd);
返回(但是);
}
按钮AddButtonMaster(按钮,但)
{
但是.Click+=newroutedEventHandler(这个.buttClickMaster);
返回(但是);
}
void buttClickSlaveAdd(对象发送方,事件参数e)
{
TextBox txtB1=新的TextBox();
txtB1.Background=System.Windows.Media.brusks.Magenta;
txtB1.Text=“Text”;
txtB1.宽度=75;
txtB1.高度=75;
按钮s=(按钮)发送器;
WrapPanel wp=(WrapPanel)s.Parent;
可湿性粉剂。儿童。移除;
wp.Children.Add(txtB1);
按钮b=新按钮();
b=AddButtonMaster(b);
b、 Content=“添加”;
b、 宽度=75;
wp.儿童。添加(b);
//使用Children.Add方法将按钮添加到父包装中。
}
void buttClickMaster(对象发送方,事件参数e)
{
TextBox txtB1=新的TextBox();
txtB1.Background=System.Windows.Media.brusks.Magenta;
txtB1.Text=“Text”;
txtB1.宽度=75;
txtB1.高度=75;
按钮s=(按钮)发送器;
WrapPanel wp=(WrapPanel)s.Parent;
可湿性粉剂。儿童。移除;
wp.Children.Add(txtB1);
按钮b=新按钮();
b=AddButtonMaster(b);
b、 Content=“添加”;
b、 宽度=75;
wp.儿童。添加(b);
//使用Children.Add方法将按钮添加到父包装中。
}
公共面板SP2
{
获取{return stackPanel2;}
}
void buttclicksslave(对象发送器,事件参数e)
{
按钮s=(按钮)发送器;
如果(s.Background!=画笔。蓝色和s.Background!=画笔。红色和s.Background!=画笔。绿色)
s、 背景=画笔。红色;
其他的
如果(s.Background==画笔.绿色)
s、 背景=画笔。红色;
其他的
如果(s.Background==笔刷.Blue)
s、 背景=画笔。绿色;
其他的
如果(s.Background==画笔.红色)
s、 背景=画笔。蓝色;
}
void AddTextBox(按钮发送器){
TextBox txtB1=新的TextBox();
txtB1.Text=“Text”;
txtB1.宽度=75;
txtB1.高度=75;
WrapPanel s=(WrapPanel)sender.Parent;
s、 添加(txtB1);
//使用Children.Add方法将按钮添加到父包装中。
}
void AddWrapPanelSlave(){
WrapPanel myWrapPanel=新WrapPanel();
myWrapPanel.Background=Syst