窗口C#/ WPF中的动态内容

时间:2014-05-09 09:21:43

标签: c# wpf user-interface

我需要创建一个只有一个窗口的应用程序,然后点击一个按钮就会改变窗口的内容。

我不知道该怎么做。我想使用用户控件,但我不认为这是最好的方法。也许有tab,但它不会尊重我想拥有的UI。那么最好的方法是如何实现这一目标的呢? WPF窗口上的动态内容(当然,我需要通过不同视图传递数据和变量)

这是我想要做的UI的“示例”。请原谅如果不好,我会尽快做到这一点:)

UI Example

2 个答案:

答案 0 :(得分:1)

MVVM明智的是,每个页面都需要不同的视图(以及每个视图的一些基类)。所以UserControl是要走的路。

但是,对于包含折叠标题的多个页面,可以使用TabControl

    <TabControl>
        <TabItem Visibility="Collapsed">
            <Label Content="First page"/>
        </TabItem>
        <TabItem Visibility="Collapsed">
            <Label Content="Second page"/>
        </TabItem>
    </TabControl>

要编辑特定页面,请在设计器中选择相应的项目,然后您可以查看其内容。

对于按钮,您需要一个特殊区域(因为按钮在页面之间是通用的)。这样你的窗口就会包含像

这样的网格
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Image Grid.Row="0" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Source="logo.png"/>
    <TabControl Grid.Row="1" SelectedIndex="{Binding Page}">
        ... tab items
    </TabControl>
    <StackPanel Grid.Row="2" Orientation="Horizontal" FlowDirection="RightToLeft">
        <Button Command="{Binding CommandFinish}" Content="Finish"/>
        <Button Command="{Binding CommandNext}" Content="Next"/>
        <Button Command="{Binding CommandPrevious}" Content="Previous"/>
        ... and so on, from right to left
    </StackPanel>
</Grid>

为了至少利用MVVM,您可以拥有页码,这样您的ViewModel就可以知道每页需要多少页面以及每个页面可以做什么(以控制按钮可见性和导航)。

答案 1 :(得分:0)

您提供的图像看起来像一个典型的向导。 Extended WPF Toolkit已附带向导。而且它完全免费。我建议你至少看看它。它允许您将任何类型的内容应用于任何页面。此外,还可以修改向导本身的行为。