我觉得我错过了一些非常重要的事情。我创建了以下代码:
文件: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。
谢谢!
答案 0 :(得分:4)
提供创建,配置,显示和管理窗口和对话框生命周期的功能。
和
主要用于显示独立应用程序的窗口和对话框。
由于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}}