نمایش نتایج 1 تا 21 از 21

نام تاپیک: دریافت Template برای کنترل های WPF

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    نقل قول: دریافت Template برای کنترل های WPF

    بسم الله الرحمن الرحیم


    یه کنترلی بنام ShapeTextButton که از نوع Button هست ، طراحی شد که توسط تمپلیت ای که براش طراحی شد ، قابلیت تعریف شکل برای 4 حالتِ عادی ، رویداد MouseEnter ، رویداد MouseClick و زمانی که کنترل غیر فعال بشه (توسط برنامه نویس) را داره .

    ** دقت کنید که این کلاس ، مستقلا درون خودش ، چیزی رسم نمیکنه و باید با تمپلیت ای که براش نوشته شد ، استفاده بشه تا رسم مورد نظر ، انجام بشه .
    ** این کلاس ، به همراه بقیه ی چیزهای مربوطه و به همراه تمپلیت و استایل های مربوطه را میتونید از فایل پیوستی در این پست ، دانلود کنید .


    تصاویر :

    ShapeTextButton 3.PNG

    ShapeTextButton 4.PNG

    ShapeTextButton 5.PNG



    تنظیمات پروپرتی ها :

    1) پروپرتی هایی که با نامِ ButtonShape ختم میشن ، پروپرتی هایی از نوع System.Windows.Shapes.Path هستن که شکلِ کنترل را در یکی از اون 4 حالت (که در خط بالا توضیح داده شد) ، مشخص میکنند :

    الف) پروپرتی DefaultButtonShape : شکل پیش فرض را مشخص میکنه . مقداردهی این پروپرتی ، برای رسم شکل اولیه ، الزامی هست .

    ب) پروپرتی MouseEnterButtonShape : شکل ، برای زمانی که موسِ کاربر ، روی این کنترل قرار میگیره را مشخص میکنه .

    ج) پروپرتی MouseDownButtonShape : شکل ، برای زمانی که کاربر روی این کنترل کلیک کرد را مشخص میکنه .

    د) پروپرتی ControlDisabledButtonShape : شکل ، برای زمانی که کنترل غیر فعال شد را مشخص میکنه .


    2) پروپرتی هایی که با نام ContentBrush ختم میشن ، پروپرتی هایی از نوع System.Windows.Media.Brush هستن که بِراش و قلم مو ، در صورتی که پروپرتیِ Content (این پروپرتی ، باید مقدار String داده بشه که در قسمت "نکته ها" ، در زیر ، توضیح داده شد) مقداردهی شده باشه را در حالت ها و رویدادهای مختلف ، مشخص میکنند :

    الف) پروپرتی MouseEnterContentBrush : بِراش و قلمو ی Content برای زمانی که موس کاربر ، روی این کنترل قرار میگیره را مشخص میکنه .

    ب) پروپرتی MouseDownContentBrush : بِراش و قلمو ی Content برای زمانی که کاربر روی این کنترل کلیک کرد را مشخص میکنه .

    ج) پروپرتی ControlDisabledContentBrush : بِراش و قلمو ی Content برای زمانی که این کنترل غیر فعال شد را مشخص میکنه .


    3) پروپرتی GetContentBrush_ForWhichButtonShapeProperty : که از نوع اینامِ ButtonShapeProperty هست (این enum ، ساخته شده و درون فایل پیوستی در پست زیر قرار داره) ، مشخص میکنه که اگه کاربر قصد داره از Brush ها و قلم موهایی که برای تعیین متن استفاده میشه ، از همین قلم موها هم برای کدوم یک از پروپرتی های مربوط به ButtonShape (که از نوع Path بودند) ، استفاده بشه یا استفاده نشه (مقدار ButtonShapeProperty.None) تا با تعیین این پروپرتی ، نیازی نباشه که از قلم موهایی که در پروپرتی های ButtonShape تعیین میشه ، استفاده بشه

    تا به این ترتیب ، کار برای Style دهی برای تعیین قلم موها برای پروپرتی های ButtonShape ، آسون تر بشه و هم اینکه قلم موهای Content و ButtonShape (در صورت نیاز و تمایل) ، از یک قلم مو استفاده کنند .




    طریقه ی استفاده :

    اول ، فایل های مربوطه که در این پست پیوست شده را به پروژه اضافه کنید (فایل های ShapeTextButton.cs و ButtonShapeProperty.cs و ShapeTextButtonStyle.xaml و ShapeTextButtonTemplate.xaml را به پروژه اضافه کنید) .

    فضای نام زیر را به پروژه اضافه کنید :

    xmlns:CustomControls ="clr-namespace:PoshtibangirTolo.Elements.CustomControls  "


    کد زیر را (برای الحاق فایل های تمپلیت و استایل) درون Application.Resources اضافه کنید :

            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>                <ResourceDictionary Source="ShapeTextButtonTemplate.xaml"/>                <ResourceDictionary Source="ShapeTextButtonStyle.xaml"/>            </ResourceDictionary.MergedDictionaries>        </ResourceDictionary>


    مثال :

    <CustomControls:ShapeTextButton x:Name="CloseButton" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10" Width="24" Height="24"
                    GetContentBrush_ForWhichButtonShapeProperty="Strok  e"                DefaultButtonShape="{DynamicResource CloseShape}"                MouseEnterButtonShape="{DynamicResource CloseShape}"                MouseDownButtonShape="{DynamicResource CloseShape}"                ControlDisabledButtonShape="{DynamicResource CloseShape}">
    <CustomControls:ShapeTextButton.Resources> <Path x:Key="CloseShape" Data="M2,2 L22,22 M22,2 L2,22" StrokeThickness="3" StrokeStartLineCap="Triangle" StrokeEndLineCap="Triangle"/> </CustomControls:ShapeTextButton.Resources> </CustomControls:ShapeTextButton>





    نکته ها :

    1) موقع نوشتن این تمپلیت برای این کنترل ، فرض فقط بر این گذاشته شد که کاربر ، نوع پروپرتیِ Content را اگه قرار هست که مقداردهی کنه ، فقط از نوع String مقداردهی کنه (تا مجددا پروپرتی ای مجزا برای متن برای این کلاس در نظر گرفته نشه) .پس حتما دقت کنید که برای این کنترلِ ShapeTextButton ، اگه پروپرتیِ Content را میخواید مقداردهی کنید ، مقدارش را فقط از نوع String مشخص کنید .

    2) دقت کنید که با قرار دادنِ مقدار ButtonShapeProperty.None برای پروپرتیِ GetContentBrush_ForWhichButtonShapeProperty (که بصورت پیش فرض هم همین مقدار را داره) ، باید بصورت جداگانه ، برای هر کدوم از پروپرتی هایی که با نام ButtonShape ختم میشن ، مقدار پروپرتی Fill یا Stroke (یا هر دو) را حتما تعیین کنید .

    و برعکس ، اگه مقداری بجز ButtonShapeProperty.None را برای اون پروپرتی مشخص کنید ، پروپرتی Fill یا Stroke (یا هر دو که بسته به نوع انتخاب مقدار پروپرتی GetContentBrush_ForWhichButtonShapeProperty داره) را اگه برای پروپرتی هایی که با نام ButtonShape ختم میشن ، مقداردهی کنید ، چون از مقادیر و قلم موهایی که برای پروپرتی هایی که با نام ContentBrush ختم میشن ، استفاده میشه ، پس تعیین مقدارشون ، هیچ تاثیری نخواهد داشت .

    3) بصورت پیش فرض ، پروپرتیِ Focusable ئه این کنترل ، غیر فعال هست که برای فوکوس کردن روی این کنترل ، باید فعال اش کنید .
    همچنین علاوه بر فعال کردن پروپرتیِ
    Focusable ، برای اینکه زمانی که روی کنترل فوکوس میشه ، تغییر شکل کنترل دیده بشه (و به اون شکل ، تغییر کنه) ، باید پروپرتیِ MouseEnterButtonShape را هم مقداردهی کنید .




    *** به نیت حضرت ولی عصر (عج) و برای اموات خودمون و خودتون ، یه فاتحه بگیرین ، ممنون میشم .

    *** با تشکر ویژه از استادم (The King) که کمک بسیار زیادی بهم کردن .
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله SajjadKhati : جمعه 05 دی 1399 در 13:46 عصر

تاپیک های مشابه

  1. سوال: اضافه کردن cssfriendly template به لیست template های ویژوال استودیو
    نوشته شده توسط e-arasteh در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: پنج شنبه 14 شهریور 1398, 12:04 عصر
  2. سوال: template
    نوشته شده توسط هم دانشگاهی در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 7
    آخرین پست: جمعه 30 مهر 1389, 21:04 عصر
  3. template
    نوشته شده توسط javad0062 در بخش Classic ASP
    پاسخ: 2
    آخرین پست: یک شنبه 13 اردیبهشت 1388, 10:26 صبح
  4. محل ذخیره فرمهای Template
    نوشته شده توسط mohammad diba در بخش C#‎‎
    پاسخ: 1
    آخرین پست: شنبه 15 فروردین 1388, 00:58 صبح
  5. تفاوت item template و edit item template
    نوشته شده توسط peymannaji در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: دوشنبه 29 مرداد 1386, 18:55 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •