2010-04-04 65 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