Как связать свойство управления с другим свойством окна?

У меня есть окно, в котором a имеет прямоугольник. Я хочу, чтобы его заполнение было градиентом для другого заполнения прямоугольника, но в другом окне. Окно «источник» определяется как:


Есть прямоугольник

    
        
            
                
                    ...
                
            
        
    

и имущество:

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

Теперь в целевом окне я определяю прямоугольник:

    
        
            
                
                
            
        
    

где BrushToColorConverter преобразует кисть в цвет. Это не работает, и я не знаю, почему, кажется, у меня проблема с обращением к этому «исходному» окну. Я создаю его в конструкторе целевого окна:

        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 .. Нет необходимости в настройке Owner then .. :)
добавлено автор Rohit Vats, источник
Итак, вы хотите, чтобы ваше дочернее окно передало свойство в основное окно. Если вы используете MVVM, ваш ответ лежит здесь - wpf и mvvm "> stackoverflow.com/questions/7507527/…
добавлено автор Rohit Vats, источник
В противном случае, если не следовать MVVM, я бы предложил вам поместить это свойство в базовый класс и наследовать оба окна из этого базового класса, чтобы оба могли получить доступ к этому свойству. Дайте мне знать, если возникнут какие-либо вопросы.
добавлено автор Rohit Vats, источник
Мне нужно иметь это свойство в другом окне
добавлено автор deha, источник
да, но SelectedBrush находится в окне Owned, а не в Owning. Из цели (MainWindow) мне нужно обратиться к ColorSelectorWindow.SelectedBrush. Ваше решение, похоже, ищет MainWindow.SelectedBrush и привязывает его к заполнению прямоугольника ColorSelectorWindow, которое не то, что я ищу ... Или я неправильно понял sth
добавлено автор deha, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot