WPF Привязка визуальной кисти к другому окну

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

<Rectangle.Fill>
<VisualBrush Stretch="Uniform" Visual="{Binding ElementName=local:MainWindow}" />
</Rectangle.Fill>

1 ответ

Решение

Да, но не в чистом XAML и не используя ElementName. Вместо этого вам нужно будет передать ссылку на главное окно в окно настроек. Затем вы можете привязать VisualBrush.Visual к этой ссылке.

В качестве упрощенного примера, при создании окна настроек вы можете установить его DataContext в главное окно:

// MainWindow.xaml.cs
SettingsWindow w = new SettingsWindow { DataContext = this };
w.Show();

Затем в окне настроек вы можете получить доступ к главному окну как {Binding} (потому что MainWindow теперь является DataContext окна настроек, и {Binding} относится к DataContext):

<!-- SettingsWindow.xaml -->
<Rectangle.Fill>
  <VisualBrush Stretch="Uniform" Visual="{Binding}" />
</Rectangle.Fill>

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

Другие вопросы по тегам