วิธีที่จะทำให้บางส่วนหนึ่งขอ WPF ออกแบบเหมือนกันไปหลายหน้าต่าง

0

คำถาม

ดังนั้นฉันกำลังทำเรื่องเห็นพื้นฐาน WPF และฉันต้องการนำทางบาร์ที่จะเป็นเหมือนกันระหว่างหลายหน้าต่างและฉันสงสัยว่าถ้านั่นคือวิธีที่จะทำให้เป็น XAML และชั้นเรียนเดียวสำหรับเรื่องการนำทางบาร์ที่แล้วการนำเข้ามันให้หน้าต่างอื่นดังนั้นฉันไม่ต้องคัดลอกและวางเดียวกันรหัสทุกครั้งที่ผมสร้างใหม่หน้าต่าง

ปัจจุบันรหัส:

หน้าต่างหลัก.vb

Class FloorWindow
    Private Sub SetAllInactive()
        ' This function will change all StackPanel objects
        ' of the navGrid to its inactive style which consists
        ' of opacity .1

        Dim childType As String

        For Each child In navGrid.Children
            childType = child.GetType().ToString()
            ' Check if child object of navGrid is a StackPanel
            If childType = "System.Windows.Controls.StackPanel" Then
                child.Opacity = 0.1
            End If
        Next
    End Sub
    Private Sub LogoBtnClick(sender As Object, e As RoutedEventArgs) Handles logoBtn.Click
        Trace.WriteLine("Logo Clicked")
        ' Go to default page
        SetAllInactive()
        floorStack.Opacity = 1
    End Sub

    Private Sub FloorBtnClick(sender As Object, e As RoutedEventArgs) Handles floorBtn.Click
        Trace.WriteLine("Floor Clicked")
        ' Go to floor page and change its stack to active attributes
        SetAllInactive()
        floorStack.Opacity = 1
    End Sub

    Private Sub ClientsBtnClick(sender As Object, e As RoutedEventArgs) Handles clientsBtn.Click
        Trace.WriteLine("Clients Clicked")
        ' Go to floor page and change its stack to active attributes
        SetAllInactive()
        clientsStack.Opacity = 1
    End Sub

    Private Sub SettingsBtnClick(sender As Object, e As RoutedEventArgs) Handles settingsBtn.Click
        Trace.WriteLine("Settings Clicked")
        ' Go to floor page and change its stack to active attributes
        SetAllInactive()
        settingsStack.Opacity = 1
    End Sub
End Class

หน้าต่างหลัก.xaml

<Window x:Class="FloorWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:RestaurantManager"
        xmlns:fa5="http://schemas.fontawesome.com/icons/"
        mc:Ignorable="d"
        Title="Restaurant Floor" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="70"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <Grid x:Name="navGrid" Background=" #212121">
            <Grid.RowDefinitions>
                <!-- Height of item menu should be same as width of the outter column -->
                <RowDefinition Height="70"/>
                <RowDefinition Height="70"/>
                <RowDefinition Height="70"/>
                <RowDefinition Height="70"/>
            </Grid.RowDefinitions>
            <!-- Menu Item Defenition Start -->
            <Border Grid.Row="0" BorderBrush="White" BorderThickness="0 0 0 .1"/>
            <Button x:Name="logoBtn" Grid.Row="0" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
            <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="40" Foreground="#03DAC5">
                E
            </TextBlock>
            <Border Grid.Row="1" BorderBrush="White" BorderThickness="0 0 0 .1"/>
            <Button x:Name="floorBtn" Grid.Row="1" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
            <StackPanel x:Name="floorStack" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center">
                <fa5:SvgAwesome Icon="Solid_BorderAll" Width="20" Foreground="White"/>
                <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Floor</TextBlock>
            </StackPanel>
            <Border Grid.Row="2" BorderBrush="White" BorderThickness="0 0 0 .1"/>
            <Button x:Name="clientsBtn" Grid.Row="2" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
            <StackPanel x:Name="clientsStack" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Opacity=".1">
                <fa5:SvgAwesome Icon="Solid_UserFriends" Width="20" Foreground="White"/>
                <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Clients</TextBlock>
            </StackPanel>
            <Border Grid.Row="3" BorderBrush="White" BorderThickness="0 0 0 .1"/>
            <Button x:Name="settingsBtn" Grid.Row="3" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
            <StackPanel x:Name="settingsStack" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Center" Opacity=".1">
                <fa5:SvgAwesome Icon="Solid_Cogs" Width="20" Foreground="White"/>
                <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Settings</TextBlock>
            </StackPanel>
            <!-- Menu Item Defenition End -->
        </Grid>
    </Grid>
</Window>
vb.net wpf
2021-11-23 21:09:40
1

คำตอบที่ดีที่สุด

1
  1. สร้างใหม่ UserControl (โครงการ->เพิ่มผู้ใช้ควบคุม(WPF)ในราสตูดิโอ)

  2. ย้าย"navGrid"ธาตุที่จะอ reused(ตัดและวาง)จาก MainWindow ที่ XAML ภาษามาร์คอัป language ของรายใหม่ที่ถูกสร้างขึ้น UserControl.

    ที่ XAML ของภาษามาร์คอัป language UserControl ควรจะดูอะไรแบบนี้:

     <UserControl ...
             xmlns:local="clr-namespace:RestaurantManager"
             xmlns:fa5="http://schemas.fontawesome.com/icons/">
         <Grid>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="70"/>
                 <ColumnDefinition Width="1*"/>
             </Grid.ColumnDefinitions>
             <Grid x:Name="navGrid" Background=" #212121">
                 <Grid.RowDefinitions>
                     <!-- Height of item menu should be same as width of the outter column -->
                     <RowDefinition Height="70"/>
                     <RowDefinition Height="70"/>
                     <RowDefinition Height="70"/>
                     <RowDefinition Height="70"/>
                 </Grid.RowDefinitions>
                 <!-- Menu Item Defenition Start -->
                 <Border Grid.Row="0" BorderBrush="White" BorderThickness="0 0 0 .1"/>
                 <Button x:Name="logoBtn" Grid.Row="0" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
                 <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="40" Foreground="#03DAC5">
                     E
                 </TextBlock>
                 <Border Grid.Row="1" BorderBrush="White" BorderThickness="0 0 0 .1"/>
                 <Button x:Name="floorBtn" Grid.Row="1" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
                 <StackPanel x:Name="floorStack" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center">
                     <fa5:SvgAwesome Icon="Solid_BorderAll" Width="20" Foreground="White"/>
                     <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Floor</TextBlock>
                 </StackPanel>
                 <Border Grid.Row="2" BorderBrush="White" BorderThickness="0 0 0 .1"/>
                 <Button x:Name="clientsBtn" Grid.Row="2" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
                 <StackPanel x:Name="clientsStack" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Opacity=".1">
                     <fa5:SvgAwesome Icon="Solid_UserFriends" Width="20" Foreground="White"/>
                     <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Clients</TextBlock>
                 </StackPanel>
                 <Border Grid.Row="3" BorderBrush="White" BorderThickness="0 0 0 .1"/>
                 <Button x:Name="settingsBtn" Grid.Row="3" Panel.ZIndex="10" TabIndex="10" Opacity="0"/>
                 <StackPanel x:Name="settingsStack" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Center" Opacity=".1">
                     <fa5:SvgAwesome Icon="Solid_Cogs" Width="20" Foreground="White"/>
                     <TextBlock Foreground="White" HorizontalAlignment="Center" Margin="0,5,0,0">Settings</TextBlock>
                 </StackPanel>
                 <!-- Menu Item Defenition End -->
             </Grid>
         </Grid>
     </UserControl>
    
  3. เคลื่อนย้ายรหัส(ตัดและวาง)นั้นคือที่เกี่ยวข้องกับระบบนำทางส่วนประกอบจากรหัสหลังของหน้าต่างต้องรหัสหลังของ UserControl

  4. เพิ่ม UserControl ต้องมีหน้าต่างที่คุณต้องการของคุณเหมือนกันแถบนำทาง@label:

     <Window x:Class="FloorWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local="clr-namespace:RestaurantManager"
             xmlns:fa5="http://schemas.fontawesome.com/icons/"
             mc:Ignorable="d"
             Title="Restaurant Floor" Height="450" Width="800">
         <Grid>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="70"/>
                 <ColumnDefinition Width="1*"/>
             </Grid.ColumnDefinitions>
             <local:UserControl1 />
             ...
         </Grid>
     </Window>
    
2021-11-24 14:36:42

มันทำงานขอบคุณสำหรับความช่วยเหลือ +1:)
DeadSec

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่