Выполнение глубокой копии стандартного экземпляра формы в приложении WPF C # - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть два экземпляра прямоугольника, я хочу скопировать атрибуты одного в другой, но приведенный ниже код приводит к изменениям в копии, влияющим на оригинал.

Я считаю, что мне нужно выполнить глубокоекопия исходного прямоугольника, чтобы избежать такого поведения, но как я могу это сделать?

Приложение CF WPF.

using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            SpecialButton tmp = new SpecialButton();
            tmp.Update();
        }

        public class SpecialButton
        {
            public Rectangle Original_Properties { get; set; }
            public Rectangle Copy_Properties { get; set; }

            public void Update()
            {
                Original_Properties = new Rectangle();
                Copy_Properties = new Rectangle();

                Original_Properties.StrokeThickness = 1;
                Original_Properties.Stroke = Brushes.White;
                Original_Properties.Width = 20;
                Original_Properties.Height = 20;
                Original_Properties.Tag = "exampleTag";

                Copy_Properties = Original_Properties; // this needs to be a deep copy i think.

                Copy_Properties.Width = Copy_Properties.Width / 2;
                Copy_Properties.Height = Copy_Properties.Height / 2;
                Copy_Properties.StrokeThickness = 2;
                Copy_Properties.Tag = Original_Properties.Tag + "_selected" ;
            }
        }
    }
}

1 Ответ

0 голосов
/ 13 февраля 2019

Глубокое копирование пользовательского интерфейса wpf очень просто, если вам не нужно сохранять источник значений какого-либо свойства зависимости.XamlWriter.Save(objcet) и XamlReader.Parse(string) сделают это за вас.

var btn1 = new Button() { Content = "click me" };
var btn2 = (Button)XamlReader.Parse(XamlWriter.Save(btn1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...