【问题标题】:How to change the content control Content in WPF?如何更改 WPF 中的内容控件 Content?
【发布时间】:2013-11-22 05:00:22
【问题描述】:

在我的项目中,我有固定的页眉和页脚,以及可更改的内容。所以我把 ContentControl 放在我的窗口中。

<Grid>
        <Canvas Name="canvas_Logo" HorizontalAlignment="Center" VerticalAlignment="Top" Width="180">            
            <Image Source="Images/k1.png" Grid.Row="1" Width="180" />
        </Canvas>
        <ContentControl VerticalAlignment="Center" Name="CC1" Grid.Row="2" Height="450"/>
        <Canvas x:Name="canvas_Marque" ClipToBounds="True" Height="60" HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="1022" Background="DarkRed" />
    </Grid>

看起来像这样……

我已经创建了两个用户控件名称 page1、page2。第 1 页有一个按钮,当我单击按钮 ContentControl 时显示第 2 页。

所以我在 button1_Click 中编写了以下代码

MainPage n = new MainPage();
n.CC1.Content = new Page2();

但是在点击按钮时 ContentControl 没有改变我能做些什么呢?

我的页面1 xaml

<Grid Background="AliceBlue">
        <Label Content="Child1" Height="28" HorizontalAlignment="Left" Margin="74,65,0,0" Name="label1" VerticalAlignment="Top" Width="157" />
        <Button Content="load page2 and destroy this" Height="31" HorizontalAlignment="Left" Margin="79,124,0,0" Name="button1" VerticalAlignment="Top" Width="186" Click="button1_Click" />
    </Grid>

page2 xaml

 <Grid Background="CadetBlue">
        <Label Content="This is page 2" Height="28" HorizontalAlignment="Left" Margin="96,82,0,0" Name="label1" VerticalAlignment="Top" Width="148" />
    </Grid>

如何改变WPF中的内容控件Content?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    啊,我的朋友……我们又见面了……很高兴看到你的项目取得了进展……

    现在,我的下一个建议是:不要从后面的代码中做这些事情......让 XAML 绑定到它的工作......

    通常,使用 MVVM,您将在基本视图模型类型的属性上绑定内容控制源。所以,让我们假设VM1VM2 都扩展BasicViewModel,并且你有一个这样定义的属性:

    Public BasicViewModel Current_VM {get;set;}
    

    现在,当您想要交换时,您需要做的就是将 Current_VMVM1 更改为 VM2,然后绑定将完成剩下的工作,将您的窗口更新为正确的视图(假设您有数据模板集..但您从未说过您是否使用 MVVM ...)

    【讨论】:

    • stackoverflow.com/questions/16855352/… 在这里我得到了这个想法。它看起来很简单。你能通过并为我的问题提供一个简单的解决方案吗?
    • 这与您之前的问题的my answer 完全相同。你所要做的就是按照我在那里的建议使用它,我的屏幕截图显示了那里的结果(用户控件只是有一个蓝色背景的标签,上面写着“来自用户控件的你好”)
    【解决方案2】:

    您不能从 Page1 UserControl 实例化新的 MainPage,因为 MainPage 已经是 Page1 的主机(如果我理解正确的话)。如果您要从代码行为管理页面(不是最佳实践参考。@Noctis),在这种情况下,您必须从 MainPage.xaml.cs 完成所有工作。然后,您必须找到某种方法将参数传递回 MainPage 以更改内容。 正如@Noctis 所说,通常这是在 ViewModel 中完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多