3

我是WPF的初学者,所以我问这个..

假设我有一个窗口,并且在窗口内我想要有类似容器的东西,可能只是边框或面板(以 winform 术语)。容器的内容绑定到选定的选项(例如:按钮)。因此,例如,当用户选择 OPTION 1 时,容器会显示图表;当用户选择选项 2 时,容器显示填充数据的列表视图;当用户选择选项 3 时,容器会显示其他内容,依此类推。

最好/最好(或最简单)的方法是什么?我正在考虑对容器的内容使用用户控件,但不知道这是否是一个很好的解决方案,也不知道使用用户控件来显示一些复杂的东西和可能的一些计算的性能。大家还有什么想法吗?

插图:

4

3 回答 3

4

为了详细说明@Sheridan的答案,这里有一个简单的TabControlXAML 可以满足您的需要:

<TabControl TabStripPlacement="Left">

        <TabItem Header="Option 1">
            <Grid Background="DarkGray">
                <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 1"/>
            </Grid>
        </TabItem>

        <TabItem Header="Option 2">
            <Grid Background="DarkBlue">
                <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 2"/>
            </Grid>
        </TabItem>

        <TabItem Header="Option 3">
            <Grid Background="DarkSlateBlue">
                <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 3"/>
            </Grid>
        </TabItem>

    </TabControl>

结果:

在此处输入图像描述

您可以通过将这个简单的添加Style到您的Window.Resources

 <Window.Resources>
        <Style TargetType="TabItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TabItem">
                        <RadioButton Content="{TemplateBinding Header}" Margin="2"
                                     IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

然后导致:

在此处输入图像描述

“WPF Mentality”让您认为 UI 控件的功能是其功能,而不是外观,这是一个TabControl=)

于 2013-08-30T19:10:59.707 回答
4

我解决了这个问题ContentControl

MainWindow:(定义您希望可视化为资源的视图)

<Window.Resources>
    <DataTemplate DataType="{x:Type viewModels:SystemPCViewModel}">
        <controls:SystemPCControl/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModels:ChipPCViewModel}">
        <controls:ChipPCControl/>
    </DataTemplate>
    </ResourceDictionary>

</Window.Resources>

<Grid>
   <ContentControl Content="{Binding CurrentView}"/>
</Grid>

ViewModel:(再简单不过了)

public ViewModelBase CurrentView
{
    get { return currentView; }
    set { Set(() => CurrentView, ref currentView, value); }
}

你去那里,你可以通过为你在你的MainWindow

private void OnCommandExecuted()
{
    CurrentView = someViewModel;
}

private void OnAnotherCommandExecuted()
{
    CurrentView = anotherViewModel;
}

于 2015-05-04T18:32:58.230 回答
1

您所描述的内容听起来非常接近标准TabControl,但是ControlTemplate将选项卡放在左侧而不是内容面板上方。使用这种方法意味着UserControleach TabItem中都有一个,例如。多个控件。TabControl您可以从MSDN的TabControl 类页面中找到更多信息。

于 2013-08-30T09:14:48.960 回答