سلام
همانطور که میدونید وقتی برای ویندوز استایل تعریف میکینم در حالت ماکزیماز تسک بار ویندوز نمایش داده نمیشه و این مشکل خیلی از دوستان بوده که هم در همین تالار و هم از طریق ایمیل مطرح کردند
من این مشکل رو به شکل زیر در استایل برنامه حل کردم و با این روش دیگه اصلا نیاز نیست برای هر پنجره از برنامه مجدد کد بنویسید و این حالت در خود استایل برنامه حل میشود
برای مثال هم همان استایل ویندوز 7 رو که هم در آموزشهام و هم در چند پست دیگه گذاشته بودم مجدد با اصلاح این مورد قرار میدم
روش کار به این شکل هست که شما برای استایل برنامه یک کلاس برای مدیریت اون دارید(اگر قبلا نداشتید درست می کنید همان گونه که در استایل قبلی من بود)
در مثال ما این کلاس با نام WindowManager هست (شما برای کار کردن دکمه های استایل به اون نیاز دارید برای اطلاعات بیشتر به آموزش نهم من مراجعه کنید)
در این کلاس متد زیر رو اضافه می کنید
using WinInterop = System.Windows.Interop;
using System.Runtime.InteropServices;
WindowState state = WindowState.Normal;
void Load(object sender, EventArgs e)
{
Window window = sender asWindow;
if (window != null)
{
state = window.WindowState;
System.IntPtr handle = (new WinInterop.WindowInteropHelper(window)).Handle;
WinInterop.HwndSource.FromHwnd(handle).AddHook(new WinInterop.HwndSourceHook(WindowProc));
window.WindowState = WindowState.Normal;
window.WindowState = state;
}
}
همچنین مجموعه کد های که من در یک فایل txt به نام code ضمیمه کردم (چون تعداد کارکتر ها زیاد میشد مجبور شدم ضمیمه کنم)تمام این ها رو هم به کلاس اضافه کنید
حالا در کد های Xaml مربوط به استایل برنامه اگر کلاس رو معرفی نکردید ابتدا به شکل زیر معرفی می کنید
x:Class="MyWin.WindowManager"
Mywin نام namespace من هست
حالا باید این تکه کد قرمز رنگ رو به استایل اضافه کنید
<Stylex:Key="Window7Skin1" TargetType="{x:Type Window}">
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="FontSize"Value="10"/>
<Setter Property="FontWeight" Value="Normal"/>
<EventSetter Event="Loaded" Handler="Load"/>
تا اینجا دیگه کار تمام هست فقط یک نکته اینکه برای نمایش زیبا نر ویندوز در حالت ماکزیماز در کد های استایل برنامه بهتر است تنظیمات رو به گونه ای انجام دهید که وقتی وندوز ماکزیماز شده اگر Border برای استایل تعریف کردیدیا گوشه های فرم گرد است Border رو بردارید و گوشه ها را تیز کنید
مثلا در استایل من به این شکل عمل شده
<Trigger Property="WindowState" Value="Maximized">
<Setter TargetName="MaxButton" Property="Tag" Value="Restore"/>
<Setter Property="BorderThickness" TargetName="border" Value="0"/>
<Setter Property="CornerRadius" TargetName="border" Value="0"/>
<Setter Property="CornerRadius" TargetName="Glow" Value="0"/>
<Setter Property="CornerRadius" TargetName="WindowBorder" Value="0"/>
<Setter Property="BorderThickness" TargetName="WindowBorder" Value="0"/>
<Setter Property="Margin" TargetName="border" Value="0"/>
<Setter Property="Margin" TargetName="border1" Value="0"/>
<Setter Property="Margin" TargetName="ControlBox" Value="0,0,2,0"/>
</Trigger>
میتونید مثال اصلاح شده من رو دانلود کنید