问题
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>
回答1:
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.
来源:https://stackoverflow.com/questions/2573136/wpf-binding-a-visual-brushs-visual-to-a-different-window