将XAML页面作为子对象添加到面板

时间:2018-07-10 15:41:27

标签: c# wpf mvvm

我正在尝试一些C#WPF并设置我的应用程序。通常,我会分开视图,因此在主窗口中,我想在主窗口xaml中插入子xaml文件,但找不到找到设置页面或类似内容来源的方法。

<Window x:Class="backset.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:backset"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<DockPanel>
    <!-- Menu Bar -->
    <Page DockPanel.Dock="Top">
        <!-- How do I get this to load the MenuBar.xaml? -->
    </Page>

    <!-- Master -->
    <Page DockPanel.Dock="Left">
        <!-- This should load my MasterList.xaml -->
    </Page>

    <!-- Detail -->
    <Page DockPanel.Dock="Right">
        <!-- This should load my DetailsPage.xaml -->
    </Page>

    <!-- Status Bar -->
    <Page DockPanel.Dock="Bottom">
        <!-- This should load my StatusBar.xaml -->
    </Page>
</DockPanel>

或者页面是完全错误的方法。

2 个答案:

答案 0 :(得分:1)

我建议使用UserControl而不是Page,因为它没有所有内置的导航功能等。然后,您可以直接添加用户控件,如下所示:

<local:MenuBar DockPanel.Dock="Top"/>

或者您可以添加内容演示者并绑定内容:

<ContentPresenter DockPanel.Dock="Top" Content={Binding Path=MyMenuBarPage}/>

答案 1 :(得分:0)

我找到了解决方案。在WPF中,我可以按名称直接加载UserControl。

<Window x:Class="backset.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:backset"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<DockPanel>
    <!-- Menu Bar -->
    <local:MenuBar DockPanel.Dock="Top"/>

    <!-- Master -->
    <local:ApplicationList DockPanel.Dock="Left"/>

    <!-- Detail -->
    <local:ApplicationDetails DockPanel.Dock="Right"/>

    <!-- Status Bar -->
    <local:StatusBar DockPanel.Dock="Bottom"/>

</DockPanel>