Як властивість властивості керувати властивостями іншого вікна?

У мене є вікно, в якому є прямокутник. Я хочу, щоб його заливка була gradientstop для іншого заповнення прямокутника, але в іншому вікні. Вікно "джерело" визначається як:


Там прямокутник

    
        
            
                
                    ...
                
            
        
    

і майно:

public partial class ColorSelectorWindow : Window
{
    public Brush SelectedBrush
    {
        get
        {
            return ColorPicker.Fill;
        }
    }
}

Тепер у цільовому вікні я визначаю прямокутник:

    
        
            
                
                
            
        
    

де BrushToColorConverter перетворює Brush в Color. Це не працює, і я не знаю, чому, здається, у мене виникла проблема з вирішенням цього вікна "джерело" .. Я будую його в конструкторі цільового вікна:

        public MainWindow()
        {
            colorWindow = new ColorSelectorWindow();
            colorWindow.Name = "colorWindowSelector";
            colorWindow.Hide();
            InitializeComponent();
        }

Я лише ховаюсь і показую, не закриваю напевно. Як правильно прив'язувати його?

1
Використовуйте властивість bindin для властивості OwnerWindow ... stackoverflow.com/questions/7825379/ …
додано Автор WPF-it, джерело

1 Відповіді

Вам потрібно мати властивість SelectedBrush на своєму MainWindow, і вам просто потрібно пов'язати колір цієї кисті, використовуючи RelativeSource. Отже, це буде для вас -


   
     
        
        
     
   

Але переконайтеся, що під час створення вікна ви встановили його власника як MainWindow -

public MainWindow()
{
   InitializeComponent();
   colorWindow = new ColorSelectorWindow();
   colorWindow.Name = "colorWindowSelector";
   colorWindow.Owner = this;
   colorWindow.Hide();
}
1
додано
Якщо у вас є властивість у тому ж вікні, де ваш прямокутник просто замінить сполучення, щоб сказати SelectedBrush замість Owner.SelectedBrush .. Не потрібно встановлювати Власник тоді .. :)
додано Автор Rohit Vats, джерело
Гаразд, ви хочете, щоб ваше дочірнє вікно передало майно у головне вікно. Якщо ви реалізуєте MVVM, ваша відповідь лежить тут - wpf та mvvm "> stackoverflow.com/questions/7507527/ …
додано Автор Rohit Vats, джерело
В іншому випадку, якщо не слідує MVVM, я запропонував вам поставити це властивість у базовий клас і успадкувати обидва вікна від цього базового класу, щоб обидва могли отримати доступ до цього ресурсу. Дайте мені знати у разі будь-яких питань.
додано Автор Rohit Vats, джерело
Мені потрібно мати цю властивість на іншому вікні
додано Автор deha, джерело
так, але SelectedBrush знаходиться у власному вікні, а не в Owning one. З цілі (MainWindow) мені потрібно звернутися до ColorSelectorWindow.SelectedBrush. Ваше рішення, здається, шукає MainWindow.SelectedBrush і прив'язує його до заповненого прямокутника ColorSelectorWindow, який не є тим, що я шукаю ... Або я неправильно зрозумів sth
додано Автор deha, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug