wpf将页面加载到按钮单击的<grid>中

时间:2018-03-07 12:50:16

标签: c# wpf grid

我有这个代码,但我想从xaml.cs加载帧,因为更改组合框项目我想加载不同的页面。我知道如何在网格上加载页面,但如果我这样做,我无法在组合框项目改变时更改页面

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="822.702" Width="805.597">
<StackPanel >
<Grid>
 //there is some text labels
</Grid>
    <Grid heigt="150" margin="0,450,0,0">
        <Frame Source="page1.xaml"></Frame>
    </Grid>



</StackPanel>

如果我使这个page1将被加载到网格上但是 如果我给出一些像GRD1这样的名字

 <Grid heigt="150" margin="0,450,0,0" x:name="GRD1">

    </Grid>

如果我想使用c#在xaml.cs中定义帧源,我该如何定义这个函数

 <Frame Source="page1.xaml"></Frame> 

我知道我问了一个特定的问题但是我需要每次组合框改变值时网格中的页面都是可变的。谢谢!!!!

2 个答案:

答案 0 :(得分:0)

如果您希望根据某些条件显示特定视图(根据您的情况选择组合框的项目),我建议您使用ContentControlDataTemplateSelector

编辑:伪代码

在您的窗口中,根据您要显示的不同视图,重新创建datatemplate:

    <DataTemplate x:Key="page1View">
        <Views:page1/>
    </DataTemplate>
    <DataTemplate x:Key="page2View">
        <Views:page2/>
    </DataTemplate>

然后创建一个从datatemplate选择器类派生的datatemplate选择器:Exemple of implementation 在datatemplate选择器的SelectTemplate方法中,您可以使用&#34; FindResource&#34;返回良好的数据模板。方法或在datatemplateselector类中创建datatemplate属性并将它们链接到xaml中声明的datatemplate

然后将其添加到您的窗口资源中:

    <local:MyDataTemplateSelector x:Key="MyDataTemplateSelector" />

然后使用内容控件,该内容控件将使用模板选择器显示基于组合框所选项目的右视图

<ContentControl Content="{Binding ComboboxSelectedItem}" ContentTemplateSelector="{StaticResource MyDataTemplateSelector }"/>

答案 1 :(得分:0)

我找到了最好的加载方式

<Grid>
<Frame x:name="load_frame"/>
</Grid>

这是在xaml上做什么的 然后按钮单击或组合框值更改或您想要的任何页面加载

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        load_frame.Content = new ANYPAGEYOUWANT();
    }

我正在写这个答案,因为我看到很多人都试图手动加载页面 谢谢Jonathan Perennes

PS。我忘了如果你不想显示导航栏,你必须添加

 <Frame x:Name="load_frame" NavigationUIVisibility="Hidden"/>