2010-04-04 99 views
4

我需要在我的设置窗口中显示一个矩形,以显示缩小版本的主窗口。这是我现在的非工作代码。有可能做我想做的事吗?WPF将视觉刷的视觉绑定到不同的窗口

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

回答

6

是的,但不是在纯XAML中,也不是在使用ElementName。相反,您需要将对主窗口的引用传递到您的设置窗口。然后,您可以将VisualBrush.Visual绑定到该引用。

作为一个简单的例子,创建您的设置窗口时,你可以设置它的DataContext到主窗口:

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

然后SettingsWindow,你可以访问主窗口为{Binding}(因为主窗口现在是SettingsWindow的DataContext的,并{Binding}指的DataContext):

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

在实践中你可能不会想通过主窗口对象的DataContext的,因为那太钝一个工具,但希望这给你的想法。

+0

Noob的问题,但你是什么意思,“你可能不希望将主窗口对象作为DataContext传递,因为这太钝了”?我应该通过什么? – Justin 2010-04-04 01:27:56

+0

问题是,如果将DataContext设置为MainWindow,则不能将其他任何设置为DataContext。特别是,因为你的设置窗口可能想要绑定到某种设置对象,你可能会希望settings对象成为DataContext ...或者至少是DataContext的一部分。 WPF中的习惯解决方案是创建一个“视图模型”类,其中包含视图所需的所有信息(在本例中为MainWindow visual和settings对象),并将DataContext设置为此“视图模型”。希望现在更有意义! – itowlson 2010-04-04 01:48:57

+0

它的确如此。非常感谢你! – Justin 2010-04-04 19:47:34