باز شدن ویندوها در درون یکدیگر - پیاده سازی مفهوم mdi و sdi در WPF
پیاده سازی مفهوم mdi و sdi (ویندوز فرم) در WPF چگونه است ؟
پاسخ هوش مصنوعی
در 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 پیاده سازی کنیم. برای امکانات پیشرفته تر می توانید از کتابخانه ها و الگوهای طراحی استفاده کنید.
به صورت پیش فرض در WPF مثل ویندوزفرم ها Mdi و Sdi نداریم. دلیلش هم این هست که WPF برای طراحی از تگ های xaml استفاده میکنه و توسط این تگ ها شما میتونید خودتون خیلی امکانات و ویژگیها را ایجاد کنید. برای این منظور یکی از راهها این هست که ContentControl استفاده کنید.
البته پیشنهاد بنده این هست که اگر قبلا با ContentControl و یا ساخت UserControl در WPF کار نکردید توی گوگل نحوه پیاده سازی mdi در wpf رو به صورت ویدیو سرچ کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول