C# Can';不要将窗口放入样式(WPF)
我觉得我错过了一些非常重要的事情。我创建了以下代码: 文件:App.xamlC# Can';不要将窗口放入样式(WPF),c#,wpf,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="A
<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>
虽然我可以编译代码,一切看起来都很好。我得到了从
到
的灰色摇摆线,带有“无法将窗口置于样式中”的消息。我想知道我做错了什么
我应该做些什么来改进我的代码?顺便说一句,我正在尝试使用MVVM
谢谢
提供创建、配置、显示和管理窗口和对话框的生存期的功能
以及:
主要用于显示独立应用程序的窗口和对话框
由于窗口
元素是顶级元素,因此不能将它们添加到较低级别元素的内容
。“无法将窗口放入样式”错误很明显。。。在您的案例中,您不能在样式中或在数据模板中使用窗口
您没有尝试这样做,而是有两种选择:
1) 将窗口
内容放入数据模板
,然后在窗口的内容控件
中显示该内容:
<DataTemplate DataType="{x:Type viewmodel:ViewModel}">
<!-- Define content -->
</DataTemplate>
窗口可以在wpf中设置样式吗?无法控制将什么内容设置为显示窗口。如果您想要自定义窗口外观(或者有公共部分,在所有窗口之间共享),那么您可以创建自定义控件。我看到了我设置的文本块和边距,所以如果你这样称呼“styled”,那么是的。否则我不知道你指的是什么。其次,我认为这可能与datacontext有关。谢谢你的帮助!您可以创建窗口内容的DataTemplate
。例如,它可以是Grid
(但通常是UserControl
),您可以为其设置Margin
。然后窗口将简单地使用ContentControl
作为内容,content
可以绑定到VM(并将显示Grid
)。在数据模板中设置窗口的意义何在?请解释您想要实现什么,因为您的代码中不清楚这一点。因此,我创建了一个新的窗口文件,我们称之为TestWindow.xaml,但我似乎无法将其绑定到包含DataTemplate的MainWindow.xaml。您可以指出ViewModelProperty是什么吗?在我的示例中,ViewModelProperty
是任何自定义对象中的一个属性,该对象已设置为窗口。DataContext
,属于您的ViewModel
类型。这就是如何通过ContentControl
将数据从视图模型传递到DataTemplate
。
<ContentControl Content="{Binding ViewModelProperty}" />
<DataTemplate DataType="{x:Type viewmodel:ViewModel}">
<UserControl>
<!-- Define Content here -->
</UserControl>
</DataTemplate>