بدست‌آوردن تمپلیت ابزارها‌ی تلریک و کنترل‌ها در WPF

زیبایی در طراحی ابزار یکی از صفات بارز در WPF می‌باشد، داشتن کنترل‌هایی همانند کنترل‌های موجود در برنامه‌نویسی فرم‌بیس از نظر کارایی مناسب است اما بدلیل استفاده WPF از دایرکت‌ایکس در پس‌زمینه اگر بتوان کنترل‌های گرافیکی زیباتر و جذاب‌تر با همان کارایی ایجاد کرد کاری‌است بسیار دلچسب. برنامه‌نویس‌هایی که با ابزارها و کنترل‌های تلریک آشنایی دارند, حتما RadToggleSwitchButton را دیده‌اند، یک کنترل زیبا بصورت دکمه خاموش و روشن که مانند کلید لامپ می‌باشد اما همانند یک ToggleButton در WPF عمل‌می‌کند، و یا یک RadPathButton که به شما امکان تهیه یک دکمه(Button) با شکل دلخواه(با استفاده از PathGeometry) را می‌دهد و کارایی آن دقیقا معادل Button در WPF است و یا ابزارهای ساخت منوبار و تولزبار و ... که همگی بصورت بسیار زیبا در تلریک یافت می‌شود. این قابلیت‌ها فقط بدلیل محیط گرافیکی در WPF امکان‌پذیر است. اما برای تهیه هرکدام از این کنترل‌ها باید تمپلیت(Template) آن‌ را ساخت، این‌کار چندان ساده نیست و شاید حتی دربرخی موارد غیرممکن به نظربرسد. اما اگر بشود تمپلیت یک کنترل را بدست‌آورد براحتی می‌توان نمونه مشابه(با کمی تفاوت) ایجاد کرد. در ادامه نحوه بدست‌آوردن تمپلیت یک کنترل دلخواه را خواهید دید.


یک برنامه از نوع WPF ایجاد کنید و نام آن را GetControlTemplate بگذارید. دو خط زیر را به بخش using اضافه کنید(در صورت موجود نبودن)

using System.Xml;
using System.Windows.Markup;

در پنجره MainWindow برای کنترل گرید یک نام(در این‌جا grid) انتخاب کنید و درون آن یک تکست‌باس(TextBox) قرار دهید که دارای نام txtTemplate باشد و یا کد زیر را با دستور گرید جایگزین کنید:

<Grid x:Name="grid">
        <TextBox x:Name="txtTemplate" 
                 ScrollViewer.VerticalScrollBarVisibility="Auto" 
                 ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                 ScrollViewer.CanContentScroll="True" 
                 Height="Auto" 
                 Margin="0" 
                 TextWrapping="Wrap" 
                 Text="" 
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Stretch"/>
    </Grid>

برای پنجره MainWindow و ایونت(Event) لودد(Loaded) برنامه زیر را وارد نمایید.

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Control _control = new CheckBox();
            _control.Visibility = System.Windows.Visibility.Hidden;
            Type _type = (Type)_control.GetType();
            grid.Children.Add(_control);
            ControlTemplate _template = _control.Template;
            StringBuilder _sb = new StringBuilder();
            XmlWriter _writer = XmlWriter.Create(_sb,new XmlWriterSettings(){Indent=true});
            XamlWriter.Save(_template, _writer);
            txtTemplate.Text = _sb.ToString();
            grid.Children.Remove(_control);
        }

توضیحات برنامه فوق به شرح زیر است:

  • در خط 3 کنترلی را که می‌خواهیم تمپلیت آن را بدست آوریم مشخص می‌کنیم(در اینجا چک‌باکسCheckBox می‌باشد و شما می‌توانید آن را به هر کنترل دلخواه تغییردهید حتا به کنترل‌های تلریک همانند RadButton).
  • در خط 5 تایپ کنترل را بدست می‌آوریم.
  • در خط 6 کنترل به گرید اضافه می‌گردد(علت افزودن این خط برای این است که تا وقتی که کنترل به گرید یا کانواس و یا هر پانل دیگری اضافه نگردد دریافت تمپلیت آن کنترل امکان‌پذیر نمی‌باشد).
  • در خط 9 و 10 دستورات XmlWriter و XamlWriter برای تولید تمپلیت زمل به فرمت xml می‌باشد.
  • در نهایت در خط پایانی کنترل از گرید حذف می‌گردد.

برنامه را ذخیره و اجرا کنید تا تمپلیت چک‌باکس ظاهر شود.

نکته: از XmlWriter و XamlWriter برای ذخیره اطلاعات و خواص کنترل‌های شخصی‌ساز هم می‌توان استفاده نمود(شاید در آینده نمونه‌ای در همین سایت ارائه گردد).


فایلهای مطلب

کپی
لینک اشتراک گذاری

  • 335
  • 0