2016-10-28 2 views
0

메뉴 막대를 포함해야하는 WPF 응용 프로그램을 사용해야합니다. 사용자가 모든 메뉴 항목을 클릭하면 창이 다른 내용으로로드됩니다. 하나를 제안하십시오 이것을 달성하기위한 아이디어.메뉴 항목으로 창 내용을 변경하십시오. WPF를 클릭하십시오.

<Window x:Class="win3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
     Title="MainWindow" Height="700" Width="600" > 
    <Grid> 

     <DockPanel> 
      <Menu DockPanel.Dock="Top"> 
       <MenuItem Header="Student" Click="StudentMenuItem_Click"/> 
       <MenuItem Header="Academic" Click="AcademicMenuItem_Click"/> 
      </Menu> 
      <TextBox AcceptsReturn="True" /> 
     </DockPanel> 
     <Grid x:Name="grdStudent" Height="500" Width="550" Margin="22,56,22,115"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="2*"/> 
       <ColumnDefinition Width="3*"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="6*"/> 
       <RowDefinition Height="1*"/> 
      </Grid.RowDefinitions> 
      <Label Content="Student Id" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="57,51,0,0"/> 
      <Label Content="Student Name: " HorizontalAlignment="Left" Margin="57,110,0,0" VerticalAlignment="Top" Width="84"/> 
      <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="46,51,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="175"/> 
      <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="46,110,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="175"/> 
     </Grid> 

     <Grid x:Name="grdAcademic" Height="500" Width="550" Margin="22,56,22,115" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="2*"/> 
       <ColumnDefinition Width="3*"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="1*"/> 
       <RowDefinition Height="5*"/> 
      </Grid.RowDefinitions> 
      <ComboBox x:Name="cmbFloor" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" SelectionChanged="cmbFloor_SelectionChanged" Margin="130,29,0,0"/> 
      <ComboBox x:Name="cmbDoor" HorizontalAlignment="Left" Margin="130,10,0,0" VerticalAlignment="Top" Width="80" SelectionChanged="cmbDoor_SelectionChanged" Grid.Row="1"/> 
     </Grid> 
    </Grid> 
</Window > 

.cs

private void StudentMenuItem_Click(object sender, RoutedEventArgs e) 
     { 
      this.grdStudent.Visibility = Visibility.Visible; 
      this.grdAcademic.Visibility = Visibility.Collapsed; 
     } 

     private void AcademicMenuItem_Click(object sender, RoutedEventArgs e) 
     { 
      this.grdAcademic.Visibility = Visibility.Collapsed; 
      this.grdStudent.Visibility = Visibility.Collapsed; 
     } 

코드 위 expected.but .XMAL 파일이 서투른 모양에 따라 작동하는 파일은.

답변

1

DataTemplate과 ContentControl을 사용할 수 있습니다. 사용자 정의 컨트롤에서 'grdAcademic'및 'grdStudent'보기를 정의하고 동일하게 DataTemplate을 정의하십시오.

<DataTemplate x:Key="grdAcademicView"> 
    <local:UserControlGrdAcademic /> 
</DataTemplate> 

<DataTemplate x:Key="grdStudentView" > 
    <local:UserControlGrdStudent /> 
</DataTemplate> 

가정은, 여기에 '지역은'당신의 CLR 네임 스페이스입니다 (의 xmlns : 로컬 = "CLR-네임 스페이스 :")

메뉴 버튼 클릭이보기 모델이 개 변수와 연관 될 수 말 'IsStudent' 및 'IsAcademic'과 같이 사용하십시오.

<ContentControl Content="{Binding }"> 
    <ContentControl.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsStudent}" Value="True"> 
        <Setter Property="ContentControl.ContentTemplate" Value="{StaticResource grdStudentView}" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=IsAcademic}" Value="True"> 
        <Setter Property="ContentControl.ContentTemplate" Value="{StaticResource grdAcademicView}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 
1

당신이 당신의 다른 내용을 둘 수 있었다 (나중에 우리는 더 컨트롤러를 추가해야합니다)

StudentView.xaml

: 예를 들어 별도의 파일에서
<UserControl 
    <!-- Standard UC code here --> 
    > 
    <Grid x:Name="grdStudent" Height="500" Width="550" Margin="22,56,22,115"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="3*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="6*"/> 
      <RowDefinition Height="1*"/> 
     </Grid.RowDefinitions> 
     <Label Content="Student Id" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="57,51,0,0"/> 
     <Label Content="Student Name: " HorizontalAlignment="Left" Margin="57,110,0,0" VerticalAlignment="Top" Width="84"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="46,51,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="175"/> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="46,110,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="175"/> 
    </Grid> 
</UserControl> 

그럼 당신은 내가 MVVM-패턴을 조사 할 추천이 제외

private readonly FrameworkElement _academicView; 
private readonly FrameworkElement _studentView; 

public MainWindow() 
{ 
    InitializeComponent(); 

    _academicView = new AcademicView(); 
    _studentView = new StudentView(); 

    content.Content = _academicView; // set the default view 
} 

private void StudentMenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    content.Content = _studentView; 
} 

private void AcademicMenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    content.Content = _academicView; 
} 

뒤에 코드

<Grid> 
    <DockPanel> 
     <!-- Put your menu code here --> 
    </DockPanel> 
    <ContentControl x:Name="content" /> 
</Grid> 

에 그리고 당신의 MainWindow.xaml을 변경합니다.

+0

감사합니다. 예상대로 작동 함 – zooha

관련 문제