如何在 MainWindow 中显示我的用户控件?

Posted

技术标签:

【中文标题】如何在 MainWindow 中显示我的用户控件?【英文标题】:How can I display my user control in the MainWindow? 【发布时间】:2011-07-25 05:25:16 【问题描述】:

我正在尝试构建一个小型 MVVM 测试应用程序,但不知道如何在 MainWindow 中显示我的用户控件。

我的解决方案资源管理器:

我有一本资源字典:

    <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vm="clr-namespace:MVVM.ViewModel"
    xmlns:vw="clr-namespace:MVVM.View">

    <DataTemplate DataType="x:Type vm:ViewModel">
        <vw:View />
    </DataTemplate>

</ResourceDictionary>

我明白了:

<UserControl x:Class="MVVM.View.View"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <DataTemplate x:Key="PersonTemplate">
            <StackPanel>
                <TextBlock Text="Binding FirstName" />
            </StackPanel>
        </DataTemplate>
    </UserControl.Resources>

    <ListBox ItemsSource="Binding Path=Persons"
             ItemTemplate="StaticResource PersonTemplate" />
</UserControl>

和我的主窗口

<Window x:Class="MVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:MVVM.ViewModel"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary Source="MainWindowResources.xaml" />
    </Window.Resources>

    <Grid>

    </Grid>
</Window>

【问题讨论】:

【参考方案1】:

最明显和最简单的方法是添加ContentControl 元素:

<Grid>
    <ContentControl x:Name="mainContentControl" />
</Grid>

然后将此控件的Content属性设置为您的视图模型,相应的视图将自动加载并应用:

this.mainContentControl.Content = new ViewModel.ViewModel();

但我更愿意使用没有数据模板的另一种方式:

<Grid>
    <vw:View x:Name="mainView"/>
</Grid>
this.mainView.DataContext = new ViewModel.ViewModel();

【讨论】:

【参考方案2】:

构建您的 VS2010 解决方案,然后转到 MainWindow 的 XAML。

在左侧,有一个带有“工具箱”按钮的工具栏

打开它,它包含您可以添加到 UI 中的所有可能的 WPF 控件

您的 UserControl 应该出现在列表顶部(在一个可能名为“MVVM 控件”的类别中),只需将其拖放到您的 UI 中:)

【讨论】:

什么意思,是工具箱没有出现,还是用户控件没有出现在列表中? 很好的提示,它节省了我的时间,因为我通常通过命名空间添加用户控制!谢谢。 显然 VS2013 (Premium) 继续前进,搜索工具箱没有产生用户控件或 mvvm 结果。

以上是关于如何在 MainWindow 中显示我的用户控件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 MainWindow 传递到 MainWindow 内的用户控件?

如何设置用户控件的高度和宽度

如何从 WPF 中的另一个窗口绑定到 MainWindow 中的控件?

如何从用户控件中引发自定义路由事件?

如何在 WPF 中显示窗口而不丢失控件?

我在QT主控件mainwindow里我加了一个widget控件,我用QPainter只能在mainwindow里画直线,如何画在widget