Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Binding a visual brush's visual to a different window

I need a rectangle in my settings window to display a scaled down version of of the main window. This is the non-working code that I have right now. Is it possible to do what I want to do?

<Rectangle.Fill>
<VisualBrush Stretch="Uniform" Visual="{Binding ElementName=local:MainWindow}" />
</Rectangle.Fill>
like image 790
Justin Avatar asked Apr 04 '10 00:04

Justin


1 Answers

Yes, but not in pure XAML and not using ElementName. Instead, you'll need to pass a reference to the main window into your settings window. You can then bind the VisualBrush.Visual to that reference.

As a simplified example, when creating your settings window, you could set its DataContext to the main window:

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

Then the SettingsWindow you could access the MainWindow as {Binding} (because the MainWindow is now the SettingsWindow's DataContext, and {Binding} refers to the DataContext):

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

In practice you probably won't want to pass the main window object as the DataContext because that's too blunt an instrument, but hopefully this gives you the idea.

like image 160
itowlson Avatar answered Oct 03 '22 06:10

itowlson