无法在样式中放置窗口(WPF)

时间:2014-11-26 10:39:23

标签: c# wpf

我觉得我错过了一些非常重要的事情。我创建了以下代码:

文件:App.xaml

<Application x:Class="HelloWorld.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">
    <Application.Resources>

        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="MainView.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </Application.Resources>
</Application>

文件:MainWindow.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:viewmodel="clr-namespace:HelloWorld.ViewModel">
    <DataTemplate DataType="{x:Type viewmodel:ViewModel}">
        <Window Title="HelloWorld">
            <Window.Resources>
                <Style TargetType="TextBlock">
                    <Setter Property="Margin" Value="50"></Setter>
                </Style>
            </Window.Resources>
            <TextBlock Text="TODO" />
        </Window>
    </DataTemplate>
</ResourceDictionary>

虽然我可以编译代码,但一切看起来都不错。我得到了从<Window Title="HelloWorld"></Window>的灰色摇摆线,并带有“无法将窗口置于样式中”的消息。我想知道我做错了什么?

我应该怎样做才能改进我的代码?我正在尝试使用MVVM。

谢谢!

1 个答案:

答案 0 :(得分:4)

Window Class

  

提供创建,配置,显示和管理窗口和对话框生命周期的功能。

  

主要用于显示独立应用程序的窗口和对话框。

由于Window元素是顶级元素,因此无法将它们添加到较低级别元素的Content中。您的无法将某个窗口置于样式中错误很明显...您无法在Window中使用Style,也无法在DataTemplate中使用Window情况下。

您可以选择以下几种方式,而不是尝试:

1)将DataTemplate内容放入ContentControl,然后在Window中的<DataTemplate DataType="{x:Type viewmodel:ViewModel}"> <!-- Define content --> </DataTemplate> 中显示该内容:

<ContentControl Content="{Binding ViewModelProperty}" />

...

UserControl

2)使用Window代替<DataTemplate DataType="{x:Type viewmodel:ViewModel}"> <UserControl> <!-- Define Content here --> </UserControl> </DataTemplate> 元素:

{{1}}