دسته بندی ها
00:24 1399/11/28

باز شدن ویندوها در درون یکدیگر - پیاده سازی مفهوم mdi و sdi در WPF

مشخصات سوال کننده :
کاربر : SoheilMRP     امتیاز کاربر : 0     رتبه کاربر : 7059
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3094
هوش مصنوعی

پاسخ هوش مصنوعی

در WPF، پیاده سازی MDI (Multiple Document Interface) به طور مستقیم مانند Windows Forms وجود ندارد، اما می توان از پنجره های فرعی و کنترل های مختلف برای شبیه سازی این ویژگی استفاده کرد. برای پیاده سازی SDI (Single Document Interface) معمولاً از یک پنجره اصلی و پنجره های فرعی استفاده می شود.

در ادامه، یک مثال ساده از هر دو مفهوم را بررسی می کنیم.

مثال برای SDI:

 
<Window x:Class="MyApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="پنجره اصلی" Height="350" Width="525">
    <Grid>
        <Button Content="باز کردن پنجره فرعی" Click="OpenSubWindow" />
    </Grid>
</Window>

using System.Windows;

namespace MyApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OpenSubWindow(object sender, RoutedEventArgs e)
        {
            SubWindow subWindow = new SubWindow();
            subWindow.Show();
        }
    }
}

پنجره فرعی (SubWindow):

 
<Window x:Class="MyApp.SubWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="پنجره فرعی" Height="200" Width="300">
    <Grid>
        <TextBlock Text="این یک پنجره فرعی است" />
    </Grid>
</Window>

مثال برای MDI: برای شبیه سازی MDI، می توان از یک Canvas یا Grid در پنجره اصلی استفاده کرد و پنجره های فرعی را به این کنترل اضافه کرد.

 
<Window x:Class="MyApp.MainMDIWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="پنجره MDI" Height="400" Width="600">
    <Grid Name="mainGrid">
        <Button Content="ایجاد پنجره جدید" Click="CreateNewMDIChild" />
    </Grid>
</Window>

using System.Windows;
using System.Windows.Controls;

namespace MyApp
{
    public partial class MainMDIWindow : Window
    {
        public MainMDIWindow()
        {
            InitializeComponent();
        }

        private void CreateNewMDIChild(object sender, RoutedEventArgs e)
        {
            ChildWindow childWindow = new ChildWindow();
            childWindow.Owner = this; // تنظیم مالک
            childWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; // مرکز پنجره والد
            childWindow.Show();
        }
    }
}

پنجره MDI فرعی:

 
<Window x:Class="MyApp.ChildWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="پنجره فرعی MDI" Height="200" Width="300">
    <Grid>
        <TextBlock Text="این یک پنجره MDI است" />
    </Grid>
</Window>

در این مثال های ساده، ما به راحتی می توانیم پنجره های اساسی SDI و MDI را در WPF پیاده سازی کنیم. برای امکانات پیشرفته تر می توانید از کتابخانه ها و الگوهای طراحی استفاده کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 02:46 1399/11/29

به صورت پیش فرض در WPF مثل ویندوزفرم ها Mdi و Sdi نداریم. دلیلش هم این هست که WPF برای طراحی از تگ های xaml استفاده میکنه و توسط این تگ ها شما میتونید خودتون خیلی امکانات و ویژگیها را ایجاد کنید. برای این منظور یکی از راهها این هست که ContentControl استفاده کنید. 

البته پیشنهاد بنده این هست که اگر قبلا با ContentControl و یا ساخت UserControl در WPF کار نکردید توی گوگل نحوه پیاده سازی mdi در wpf رو به صورت ویدیو سرچ کنید.

mdi form in wpf

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود