در PresentationFramework که از همون ابتدا در پروژه WPF رفرنس داره System.Windows.Shell.WindowChrome هست، البته از نسخه NET 4.5. به بعد. لازم نیست به چیزی رفرنس بدهید.
سلامی مجدد
خیلی ممنون استاد .
استاد پیدا کردم .
همونطور که گفتید ، از System.Windows.Shell.WindowChrome باید استفاده کنیم که در فایل PresentationFramework.dll هست .
یعنی از همون لینک دوم در پست 457 که دادم .
یعنی چی دو تا کلاس وجود داره؟
در پست 457 ، دو تا لینک دادم که نام هر دو کلاس ، WindowChrome هست اما یکی (اون اولین لینک) در فضای نام Microsoft.Windows.Shell که در فایل Microsoft.Windows.Shell.dll هست) و یکی دیگه در فضای نام System.Windows.Shell که در فایل PresentationFramework.dll هست .
انگار باید از اون دومی (که در فایل PresentationFramework.dll هست) استفاده کنیم . نمیدونم اول اولی برای چیه پس و چرا وجود داره! .
------------------------------------------------------
اینو برای خودم برای آینده میگم :
کلا برای اینکه وقتی که میخوایم نوار عنوان (title bar) را سفارشی کنیم و در این صورت ، عملکردها و قابلیت های ویندوز استاندارد (مثل تغییر اندازه ی ویندوز ، دکمه های caption ، مینیمایز و ماکزیمایز و ...) را داشته باشیم ، در wpf ، روش استانداردش اینه که از کلاس System.Windows.Shell.WindowChrome (در فایل PresentationFramework.dll) استفاده کنیم .
روش استفاده از این کلاسِ WindowChrome ، بصورت کلی اینه که اول ، پروپرتیِ WindowStyle مربوط به Window (ای که میخوایم شیِ WindowChrome را براش بکار ببریم) را روی None تنظیم کنیم .
بعد ، Attached Property ئه WindowChrome (در کلاسِ WindowChrome) را برای Window اصلی مون ، مقداردهی میکنیم (که این پروپرتیِ WindowChrome ، شی ای از نوع WindowChrome میخواد) .
مثال :
XML:
<Window
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:WPF_Practice"
x:Class="WPF_Practice.TemplateWindow"
mc:Ignorable="d"
Title="TemplateWindow" Height="900" Width="1600" WindowStyle="None">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0" ResizeBorderThickness="5"/>
</WindowChrome.WindowChrome>
<Grid x:Name="mainGrid" Background="#FF2D2D2D">
</Grid>
</Window>
پروپرتیِ CaptionHeight ، ارتفاع نوار ابزار (ای که دیده نمیشه) برای قابلیت جابجایی و ... را از قسمت بالای client size ئه ویندوز مون مشخص میکنه . در واقع میشه گفت که همون اندازه ی title bar ای که دیده نمیشه اما عملکرد همون title bar را داره (مثل جابجایی و ...) را فراهم میکنه .
مشخص هست هر عددی بجز صفر باشه ، اگه کنترلی از درون برنامه مون ، در حیطه و درون این محدوده (در قسمت بالای برنامه مون) قرار بگیره ، hit testing اون کنترل مون ، عمل نمیکنه .
ResizeBorderThickness هم ضخامت دور ویندوز اصلی برنامه مون که دیده نمیشه را مشخص میکنه که وقتی موس را روی اون محوطه میبریم ، میتونیم با کلیک و درگ ، ویندوز مون را تغییر اندازه بدیم .
نکته اینکه : اگه پروپرتیِ WindowStyle مربوط به ویندوزمون را روی None قرار ندیم و همچنین پروپرتیِ WindowChrome.WindowChrome را هم به ویندوزمون اِعمال کنیم ، ممکنه مشکل hit testing بوجود بیاد (نمیدونم چرا) و این مشکل انگار با تنظیم پروپرتیِ GlassFrameThickness ئه WindowChrome به مقدار 0 ، احتمالا حل میشه .
تشکر استاد