WPF C#在应用程序启动时隐藏选项卡控件项

WPF C#在应用程序启动时隐藏选项卡控件项,c#,wpf,tabcontrol,app-startup,C#,Wpf,Tabcontrol,App Startup,我创建了一个在应用程序运行时加载的起始页,但它也显示了我的tabcontrol(两个用于编辑和绘制图表的tabitems) 如何在启动时隐藏tabcontrol项,并仅在用户选择file->new时显示 非常感谢 Xaml: 风格: <Style TargetType="TabItem" > <Setter Property="Template"> <Setter.Value> <C

我创建了一个在应用程序运行时加载的起始页,但它也显示了我的tabcontrol(两个用于编辑和绘制图表的tabitems)

如何在启动时隐藏tabcontrol项,并仅在用户选择file->new时显示

非常感谢

Xaml:

风格:

<Style TargetType="TabItem" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid>
                        <Border 
                            Name="Border"
                            Background="LightBlue"
                            BorderBrush="Black" 
                            BorderThickness="0" 
                            CornerRadius="6,6,0,0" >
                 <ContentPresenter x:Name="ContentSite"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            ContentSource="Header"
                            Margin="12,2,12,2"/>
                        </Border>
                   </Grid>
         <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightBlue" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="LightGray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


您可以将选项卡的可见性属性绑定到您的应用程序类或任何您拥有的属性,这样您只会在用户按下New后显示选项卡。

在这些场景中,我通常有一个
ProjectViewModel
(或
ProjectModel
)作为包含
窗口的
DataContext
添加。
TabControl
可以将这些选项卡绑定到数据上下文中的项目

public class ProjectViewModel : YourViewModelBase
{
    public EditingViewModel Editor { ... }

    public DiagramingViewModel Diagram { ... }
}
因此,当
NewCommand
启动时,您会说
this.DataContext=newprojectviewmodel()
。下面的样式将处理其余部分

<Window.Resources>
    <Style x:Key="HideWithoutDataContext">
        <Setter Property="UIElement.Visibility" Value="Visible" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="{x:Null}">
                <Setter Property="UIElement.Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<TabControl>
    <TabItem Header="Start Page">
       ...
    </TabItem>
    <TabItem Header="Editor"
             DataContext="{Binding Editor}"
             Style="{DynamicResource HideWithoutDataContext}"/>
    <TabItem Header="Diagram"
             DataContext="{Binding Diagram}"
             Style="{DynamicResource HideWithoutDataContext}"/>
</TabControl>

...

通过修改我的样式,我已经或多或少地实现了这一点(选项卡现在在启动时被隐藏),但是我无法让file->new将它们带回来。我很确定我没有正确地完成公共课的部分……我终于有机会坐下来再试试这个。工作得很好。多谢!
public class ProjectViewModel : YourViewModelBase
{
    public EditingViewModel Editor { ... }

    public DiagramingViewModel Diagram { ... }
}
<Window.Resources>
    <Style x:Key="HideWithoutDataContext">
        <Setter Property="UIElement.Visibility" Value="Visible" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="{x:Null}">
                <Setter Property="UIElement.Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<TabControl>
    <TabItem Header="Start Page">
       ...
    </TabItem>
    <TabItem Header="Editor"
             DataContext="{Binding Editor}"
             Style="{DynamicResource HideWithoutDataContext}"/>
    <TabItem Header="Diagram"
             DataContext="{Binding Diagram}"
             Style="{DynamicResource HideWithoutDataContext}"/>
</TabControl>