ایجاد منو درWPF

دوشنبه 24 آبان 1395

در این مقاله با ارائه یک مثال ساده ، مرحله به مرحله به بررسی چگونگی ایجاد یک منو و چگونگی بارگذاری و load صفحه یا فرم مربوط به آن گزینه از منو ، در WPF خواهیم پرداخت .

 ایجاد منو درWPF

راه های مختلفی برای ایجاد منو در WPF وجود دارد ، ما در این مقاله از Frame برای ایجاد منو استفاده خواهیم کرد . با یک جستجوی ساده میتوانید راه های دیگر برای ایجاد منو در WPF را براحتی نیز یافت کنید . 

نکته : برای کسانی که با Windows Application در Windows Form آشنایی دارند ، ما میتوانیم MDI ایجاد کنیم . در WPF ما توانایی ایجاد MDI را در فرم های خود نداریم . 

• ابتدا ، Visual Studio را باز کنید :
• حال عکس های مربوط به پروژه را به آن اضافه کنید ، برای ان کار یک فولدر با نام images ساخته و تصاویر را به آن اضافه کنید :



• پس از اضافه کردن تصاویر به پروژه ، کدهای لازم را برای MainScreen یا همان صفحه اصلی خود می نویسیم . 

<Window x:Class="The_Parcel.MainScreen"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
        Height="{Binding SystemParameters.PrimaryScreenHeight}"   
Width="{Binding SystemParameters.PrimaryScreenWidth}"  
        Title="Dashbooard" Topmost="False" WindowStartupLocation="CenterScreen" WindowStyle="ThreeDBorderWindow" WindowState="Maximized" >

• همانطور که مشاهده میکنید ، title = dashboard میباشد ، این نامگذاری به سلیقه شماست ، که در بالای برنامه نمایش داده خواهد شد . نامی مناسب برای برنامه خود انتخاب کنید : 

• Windowstartuplocation : موقعیت مکانی باز شدن صفحه را مشخص میکند . Centerscreen بدین معناست که در وسط صفحه نمایش داده خواهد شد . 

• WindowState : وضعیت صفحه را مشخص میکند ، که بصورت Maximize نمایش داده شود یا Minimize .


وضعیت های WindowsState :
Maximized ، صفحه به صورت تمام صفحه نمایش داده خواهد شد . درحالی که در وضعیت Minimized  صفحه کوچکی نمایش داده خواهد شد . 

<Window.Background>  
<ImageBrush ImageSource="Images/Simple-Orange-Wallpaper.jpg" />  
</Window.Background>  
<Window.Resources>  
<ImageBrush x:Key="Background1" ImageSource="Images/17_Booksellers_Most.jpg" />  
<ImageBrush x:Key="Background2" ImageSource="Images/promotion_new.png" />  
<ImageBrush x:Key="Background3" ImageSource="Images/smsalerts.jpg" />  
<ImageBrush x:Key="Background4" ImageSource="Images1/reports.jpg" />  
<ImageBrush x:Key="Background5" ImageSource="Images1/xyz.png" />  
<ImageBrush x:Key="Background6" ImageSource="Images1/partyorders.jpg" />  
<ImageBrush x:Key="Background7" ImageSource="Images/help_balloon.png" />  
<ImageBrush x:Key="Background8" ImageSource="Images1/neworder.jpg" />  
<ImageBrush x:Key="Background9" ImageSource="Images1/inventory.png" />  
<ImageBrush x:Key="Background10" ImageSource="Images1/Loyalcustomers.jpg" />  
<ImageBrush x:Key="Background11" ImageSource="Images1/oie_3svVKQ9e5T5o.png" />  
</Window.Resources> 


• کلید هایی را که برای دکمه ها مشخص کردید را به یاد داشته باشید .
• حال دکمه ها را اضافه کنید .

همانطور که در کد زیر مشاهده میکنید ، ما برای دکمه یک کلید مشخص میکنیم :

<ImageBrush x:Key="Background2" ImageSource="Images/promotion_new.png" />  


حال ، به دنبال اضافه کردن کلید ها ، آن هارا بوسیله {staticResource ResourceKey=”ItsBackground”} 
bind میکنیم .

<Viewbox Stretch="Uniform">  
        <Grid Height="950" Width="1500">  
            <Grid  Height="950">  
                <Grid.ColumnDefinitions>  
                    <ColumnDefinition Width="435*" />  
                    <ColumnDefinition Width="723*" />  
                </Grid.ColumnDefinitions>  
                <Button Background="{StaticResource ResourceKey=Background3}" ToolTip="Send SMS and Email." Height="91" HorizontalAlignment="Left" Name="btnSMSEmail" VerticalAlignment="Top" Width="100" Click="btnSMSEmail_Click" Grid.Column="1" Margin="19,8,0,0">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background5}" ToolTip="Manage employee data." Height="92" HorizontalAlignment="Left" Margin="473,7,0,0" Name="btnEmpDetails" VerticalAlignment="Top" Width="90" Click="btnEmpDetails_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background7}" ToolTip="Need help click here." Height="91" HorizontalAlignment="Left" Margin="134,8,0,0" Name="btnHelp" VerticalAlignment="Top" Width="92" Grid.Column="1" Click="btnHelp_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background8}" Height="91" ToolTip="Place New Order" HorizontalAlignment="Left" Margin="14,7,0,0" Name="btnOrder" VerticalAlignment="Top" Width="92" Click="btnOrder_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background9}" ToolTip="View Reports" Height="91" HorizontalAlignment="Left" Margin="132,7,0,0" Name="btnInventory" VerticalAlignment="Top" Width="92" Click="btnInventory_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background10}" ToolTip="View your customers." Height="92" HorizontalAlignment="Left" Margin="365,7,0,0" Name="btnCustomer" VerticalAlignment="Top" Width="92" Click="btnCustomer_Click" Grid.ColumnSpan="2">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background11}" ToolTip="Party orders coming soon.." Height="92" HorizontalAlignment="Left" Margin="250,6,0,0" Name="btnPartyOrders" VerticalAlignment="Top" Width="92" Click="btnPartyOrders_Click_1">  
  
                </Button>  


ازاین جا به بعد ، این همانند یک منو نمایش داده خواهد شد ، به تصویر زیر توجه فرمایید :



حال به سراغ اضافه کردن یک frame برای نمایش فرم های مربوط به هر منو می رویم . 

 یک تگ معمولی <Frame></Frame> در اینجا ایجاد خواهد شد . و ما یکسری property برای آن مشخص میکنیم :

VerticalAlignment="Stretch" Width="1480" NavigationUIVisibility="Hidden" Grid.ColumnSpan="2"  
<Frame Height="900" HorizontalAlignment="Left" Name="frame1" VerticalAlignment="Stretch" Width="1480" NavigationUIVisibility="Hidden" Grid.ColumnSpan="2" Margin="6,104,0,6"></Frame> 

• کد نهایی :

MainScren.Xaml :

<Window x:Class="The_Parcel.MainScreen"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
        Height="{Binding SystemParameters.PrimaryScreenHeight}"   
Width="{Binding SystemParameters.PrimaryScreenWidth}"  
        Title="Dashbooard" Topmost="False" WindowStartupLocation="CenterScreen" WindowStyle="ThreeDBorderWindow" WindowState="Maximized" >  
    <Window.Background>  
        <ImageBrush ImageSource="Images/Simple-Orange-Wallpaper.jpg" />  
    </Window.Background>  
    <Window.Resources>  
        <ImageBrush x:Key="Background1" ImageSource="Images/17_Booksellers_Most.jpg" />  
        <ImageBrush x:Key="Background2" ImageSource="Images/promotion_new.png" />  
        <ImageBrush x:Key="Background3" ImageSource="Images/smsalerts.jpg" />  
        <ImageBrush x:Key="Background4" ImageSource="Images1/reports.jpg" />  
        <ImageBrush x:Key="Background5" ImageSource="Images1/xyz.png" />  
        <ImageBrush x:Key="Background6" ImageSource="Images1/partyorders.jpg" />  
        <ImageBrush x:Key="Background7" ImageSource="Images/help_balloon.png" />  
        <ImageBrush x:Key="Background8" ImageSource="Images1/neworder.jpg" />  
        <ImageBrush x:Key="Background9" ImageSource="Images1/inventory.png" />  
        <ImageBrush x:Key="Background10" ImageSource="Images1/Loyalcustomers.jpg" />  
        <ImageBrush x:Key="Background11" ImageSource="Images1/oie_3svVKQ9e5T5o.png" />  
    </Window.Resources>  
    <Viewbox Stretch="Uniform">  
        <Grid Height="950" Width="1500">  
            <Grid  Height="950">  
                <Grid.ColumnDefinitions>  
                    <ColumnDefinition Width="435*" />  
                    <ColumnDefinition Width="723*" />  
                </Grid.ColumnDefinitions>  
                <Button Background="{StaticResource ResourceKey=Background3}" ToolTip="Send SMS and Email." Height="91" HorizontalAlignment="Left" Name="btnSMSEmail" VerticalAlignment="Top" Width="100" Click="btnSMSEmail_Click" Grid.Column="1" Margin="19,8,0,0">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background5}" ToolTip="Manage employee data." Height="92" HorizontalAlignment="Left" Margin="473,7,0,0" Name="btnEmpDetails" VerticalAlignment="Top" Width="90" Click="btnEmpDetails_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background7}" ToolTip="Need help click here." Height="91" HorizontalAlignment="Left" Margin="134,8,0,0" Name="btnHelp" VerticalAlignment="Top" Width="92" Grid.Column="1" Click="btnHelp_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background8}" Height="91" ToolTip="Place New Order" HorizontalAlignment="Left" Margin="14,7,0,0" Name="btnOrder" VerticalAlignment="Top" Width="92" Click="btnOrder_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background9}" ToolTip="View Reports" Height="91" HorizontalAlignment="Left" Margin="132,7,0,0" Name="btnInventory" VerticalAlignment="Top" Width="92" Click="btnInventory_Click">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background10}" ToolTip="View your customers." Height="92" HorizontalAlignment="Left" Margin="365,7,0,0" Name="btnCustomer" VerticalAlignment="Top" Width="92" Click="btnCustomer_Click" Grid.ColumnSpan="2">  
  
                </Button>  
                <Button Background="{StaticResource ResourceKey=Background11}" ToolTip="Party orders coming soon.." Height="92" HorizontalAlignment="Left" Margin="250,6,0,0" Name="btnPartyOrders" VerticalAlignment="Top" Width="92" Click="btnPartyOrders_Click_1">  
  
                </Button>  
  
                <Frame Height="900" HorizontalAlignment="Left" Name="frame1" VerticalAlignment="Stretch" Width="1480" NavigationUIVisibility="Hidden" Grid.ColumnSpan="2" Margin="6,104,0,6"></Frame>  
            </Grid>  
  
        </Grid>  
    </Viewbox>  
</Window>  

• با دو بار کلیک کردن بر روی هر دکمه ، وارد فضای جدید میشوید که در آنجا شما میتوانید eventای را برای آن دکمه تعریف کنید :




حال ، فرم ساده ای همانند زیر به آن اضافه میکنیم :


همانند زیر صفحه را مشخص کنید :


نام مناسبی برای آن انتخاب کنید :

چیزی که شما میخواهیم به عنوان نسخه برنامه نمایش داده شود را ، اضافه کنید :

Page2.Xaml :

<Page x:Class="The_Parcel.Page1"  
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
      mc:Ignorable="d"   
      d:DesignHeight="192" d:DesignWidth="469"  
    Title="Page1">  
  
    <Grid Height="958" Width="604">  
        <Grid.ColumnDefinitions>  
            <ColumnDefinition Width="7*" />  
            <ColumnDefinition Width="1169*" />  
        </Grid.ColumnDefinitions>  
        <Grid.RowDefinitions>  
            <RowDefinition Height="361*" />  
            <RowDefinition Height="597*" />  
        </Grid.RowDefinitions>  
        <RichTextBox SpellCheck.IsEnabled="True" Margin="4,8,0,43" Name="RichTextBox1" HorizontalAlignment="Left" VerticalAlignment="Center" Width="588" Height="310" FontSize="18" FontFamily="Tahoma" IsReadOnly="True" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Visible" >  
            <FlowDocument>  
                <Paragraph>  
                    <Bold FontFamily="Tahoma">Welcome To Parcel V 1.0 .</Bold>  
                </Paragraph>  
                
             
  
            </FlowDocument>  
        </RichTextBox>  
    </Grid>  
</Page> 


• حال ، دوباره به Mainscreen.xaml.cs بروید و تکه کد زیر را به آن اضافه کنید :

private void btnHelp_Click(object sender, RoutedEventArgs e)  
       {  
           frame1.Source = new Uri("Page2.xaml", UriKind.Relative);  
       } 

کد نهایی Mainscrren.xaml.cs  :

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Windows;  
using System.Windows.Controls;  
using System.Windows.Data;  
using System.Windows.Documents;  
using System.Windows.Input;  
using System.Windows.Media;  
using System.Windows.Media.Imaging;  
using System.Windows.Shapes;  
using System.Data.SqlClient;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Configuration;  
  
  
namespace The_Parcel  
{  
    /// <summary>  
    /// Interaction logic for Window1.xaml  
    /// </summary>  
    public partial class MainScreen : Window  
    {  
  
        // Uri iconUri = new Uri("pack://application:,,,/Icon1.ico", UriKind.RelativeOrAbsolute);  
        //this.Icon = BitmapFrame.Create(iconUri);  
        //  public static string strconn = ConfigurationManager.ConnectionStrings["HotemManagement"].ConnectionString;  
        //  SqlConnection connection = new SqlConnection(strconn);  
        public MainScreen()  
        {  
            InitializeComponent();  
        }  
  
        private void btnOrder_Click(object sender, RoutedEventArgs e)  
        {  
            
             
  
        }  
  
        private void btnEmpDetails_Click(object sender, RoutedEventArgs e)  
        {  
             
        }  
  
        private void btnSMSEmail_Click(object sender, RoutedEventArgs e)  
        {  
             
        }  
  
        private void btnCustomer_Click(object sender, RoutedEventArgs e)  
        {  
              
        }  
          
        private void btnPartyOrders_Click_1(object sender, RoutedEventArgs e)  
        {  
            //frame1.Source = new Uri("Partorders.xaml", UriKind.Relative);  
            MessageBox.Show("Coming Soon.......");  
        }  
  
        private void btnHelp_Click(object sender, RoutedEventArgs e)  
        {  
            frame1.Source = new Uri("Page2.xaml", UriKind.Relative);  
        }  
  
        private void btnInventory_Click(object sender, RoutedEventArgs e)  
        {  
              
        }  
    }  
}  

خروجی برنامه بصورت زیر خواهد بود : 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • WPF
  • 3k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید