Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерирование шаблонов в WPF 
:(
    Опции темы
Anyone
Дата 15.7.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Возможно ли динамически определять шаблон для контрола, к примеру, формировать строку?
PM MAIL   Вверх
Partizan
Дата 16.7.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Anyone, о каком шаблоне идёт речь?
Если о ControlTemplate, то ответ положительный.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Anyone
Дата 17.7.2009, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Это хорошо, что он положительный, но меня интересует как именно это сделать?
Было бы здорово в зависимости от ситуации динамически генерировать и подставлять шаблон.
Спасибо.
PM MAIL   Вверх
Partizan
Дата 17.7.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Anyone, вот пример из Петцольда Application = Markup + Code

Код

//---------------------------------------------------
// BuildButtonFactory.cs (c) 2006 by Charles Petzold
//---------------------------------------------------
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace Petzold.BuildButtonFactory
{
    public class BuildButtonFactory : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new BuildButtonFactory());
        }
        public BuildButtonFactory()
        {
            Title = "Build Button Factory";

            // Create a ControlTemplate intended for a Button object.
            ControlTemplate template = new ControlTemplate(typeof(Button));

            // Create a FrameworkElementFactory for the Border class.
            FrameworkElementFactory factoryBorder = 
                new FrameworkElementFactory(typeof(Border));

            // Give it a name to refer to it later.
            factoryBorder.Name = "border";

            // Set certain default properties.
            factoryBorder.SetValue(Border.BorderBrushProperty, Brushes.Red);
            factoryBorder.SetValue(Border.BorderThicknessProperty, 
                                   new Thickness(3));
            factoryBorder.SetValue(Border.BackgroundProperty, 
                                   SystemColors.ControlLightBrush);

            // Create a FrameworkElementFactory for the ContentPresenter class.
            FrameworkElementFactory factoryContent = 
                new FrameworkElementFactory(typeof(ContentPresenter));

            // Give it a name to refer to it later.
            factoryContent.Name = "content";

            // Bind some ContentPresenter properties to Button properties.
            factoryContent.SetValue(ContentPresenter.ContentProperty,
                new TemplateBindingExtension(Button.ContentProperty));

            // Notice that the button's Padding is the content's Margin!
            factoryContent.SetValue(ContentPresenter.MarginProperty, 
                new TemplateBindingExtension(Button.PaddingProperty));

            // Make the ContentPresenter a child of the Border.
            factoryBorder.AppendChild(factoryContent);

            // Make the Border the root element of the visual tree.
            template.VisualTree = factoryBorder;

            // Define a new Trigger when IsMouseOver is true
            Trigger trig = new Trigger();
            trig.Property = UIElement.IsMouseOverProperty;
            trig.Value = true;

            // Associate a Setter with that Trigger to change the
            //  CornerRadius property of the "border" element.
            Setter set = new Setter();
            set.Property = Border.CornerRadiusProperty;
            set.Value = new CornerRadius(24);
            set.TargetName = "border";

            // Add the Setter to the Setters collection of the Trigger.
            trig.Setters.Add(set);

            // Similarly, define a Setter to change the FontStyle.
            // (No TargetName is needed because it's the button's property.) 
            set = new Setter();
            set.Property = Control.FontStyleProperty;
            set.Value = FontStyles.Italic;

            // Add it to the same trigger's Setters collection as before.
            trig.Setters.Add(set);

            // Add the Trigger to the template.
            template.Triggers.Add(trig);

            // Similarly, define a Trigger for IsPressed.
            trig = new Trigger();
            trig.Property = Button.IsPressedProperty;
            trig.Value = true;

            set = new Setter();
            set.Property = Border.BackgroundProperty;
            set.Value = SystemColors.ControlDarkBrush;
            set.TargetName = "border";

            // Add the Setter to the trigger's Setters collection.
            trig.Setters.Add(set);

            // Add the Trigger to the template.
            template.Triggers.Add(trig);

            // Finally, create a Button.
            Button btn = new Button();

            // Give it the template.
            btn.Template = template;

            // Define other properties normally.
            btn.Content = "Button with Custom Template";
            btn.Padding = new Thickness(20);
            btn.FontSize = 48;
            btn.HorizontalAlignment = HorizontalAlignment.Center;
            btn.VerticalAlignment = VerticalAlignment.Center;
            btn.Click += ButtonOnClick;

            Content = btn;
        }
        void ButtonOnClick(object sender, RoutedEventArgs args)
        {
            MessageBox.Show("You clicked the button", Title);
        }
    }
}




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Anyone
Дата 17.7.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Спасибо, надеюсь, это поможет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.