不能在样式 (WPF) 中放置窗口

本文关键字:窗口 WPF 样式 不能 | 更新日期: 2023-09-27 18:31:58

我感觉我错过了一些非常重要的东西。我创建了以下代码:

文件: 应用.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>

文件: 主窗口.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。

谢谢!

不能在样式 (WPF) 中放置窗口

Window类:

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

和:

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

由于Window元素是顶级元素,因此无法将它们添加到较低级别元素的Content中。您的"无法将窗口放入样式"错误很明显...您不能在Style中使用Window,也不能在DataTemplate中使用。

与其尝试这样做,您有以下几种选择:

1) 将Window内容放入DataTemplate,然后在WindowContentControl中显示该内容:

<DataTemplate DataType="{x:Type viewmodel:ViewModel}">
    <!-- Define content -->
</DataTemplate>

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

2) 使用 UserControl 而不是 Window 元素:

<DataTemplate DataType="{x:Type viewmodel:ViewModel}">
    <UserControl>
        <!-- Define Content here -->
    </UserControl>
</DataTemplate>