Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不要将窗口放入样式(WPF)_C#_Wpf - Fatal编程技术网

C# Can';不要将窗口放入样式(WPF)

C# 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

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

文件: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>

虽然我可以编译代码,一切看起来都很好。我得到了从
的灰色摇摆线,带有“无法将窗口置于样式中”的消息。我想知道我做错了什么

我应该做些什么来改进我的代码?顺便说一句,我正在尝试使用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>