2011-01-07 4 views
3

응용 프로그램이 실행될 때로드되는 시작 페이지를 만들었으나 tabcontrol (편집을위한 두 개의 tabitem이 & 다이어그램 임)도 표시됩니다.WPF C# 응용 프로그램 시작시 TabControl 항목 숨기기

시작시 탭 컨트롤 항목을 숨기고 사용자가 파일 -> 새로 만들기를 선택했을 때만 표시하려면 어떻게합니까?

감사합니다.

XAML :

<TabControl Height="Auto" Name="tabControl1" Width="Auto"> 
      <TabItem Header="Diagram" Name="DiagramTab"></TabItem> 
      <TabItem Header="Rulebase" Name="RuleTab" > 
       <Grid> 
       <TextBox Height="Auto" Name="RuleText" Width="Auto" Text="" AcceptsTab="True" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" GotFocus="FocusChanged" KeyDown="ContentChanged" HorizontalScrollBarVisibility="Visible" /> 
       </Grid> 
      </TabItem> 
     </TabControl> 

여기 내 파일 -> 새 메뉴 항목 :

private void NewItem(object sender, RoutedEventArgs e) 
    { 
     ProcessNewCommand(); 
    } 

private void ProcessNewCommand() 
    { 
     if (dataChanged) 
     { 
      string sf = SaveFirst(); 
      if (sf != "Cancel") 
      { 
       ClearState();      
      } 
     } 
     else 
     { 
      ClearState(); 
     } 
    } 

스타일 :

<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> 
+0

몇 가지 코드를 게시 할 수 있습니까? – VoodooChild

+0

확실히 추가되었습니다! –

답변

1

이러한 시나리오에서 저는 보통 ProjectViewModel (또는 ProjectModel)을 가지고 DataContext이 포함 된 Window으로 추가됩니다. TabControl에는 데이터 컨텍스트의 항목에 바인딩 된 탭이있을 수 있습니다.

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

    public DiagramingViewModel Diagram { ... } 
} 

그래서 NewCommand 화재 당신은 this.DataContext = new ProjectViewModel()을 말할 것이다 때. 아래 스타일은 나머지 부분을 처리합니다.

<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> 
+0

내 스타일을 수정하여 일종의 (탭이 시작시 숨겨져 있음) 일종의 일을했습니다. 그러나 파일 -> 새 파일을 다시 가져올 수는 없습니다. 확실히 내가 공개 수업 부분을 올바르게하지 않았는지 ... –

+0

나는 마침내 앉아서 좀 더 시험해 볼 기회를 얻었습니다. 잘됐다. 감사합니다! –

0

당신은 당신의 응용 프로그램 클래스에 탭의 Visibility 속성을 바인딩 할 수 또는 가지고있는 항목이 무엇이든간에 사용자가 New를 누르면 탭이 표시됩니다.