不能在样式 (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。
谢谢!
Window
类:
提供创建、配置、显示和管理窗口和对话框生存期的功能。
和:
主要用于显示独立应用程序的窗口和对话框。
由于Window
元素是顶级元素,因此无法将它们添加到较低级别元素的Content
中。您的"无法将窗口放入样式"错误很明显...您不能在Style
中使用Window
,也不能在DataTemplate
中使用。
与其尝试这样做,您有以下几种选择:
1) 将Window
内容放入DataTemplate
,然后在Window
的ContentControl
中显示该内容:
<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>