Использование Style Setter в generic.xaml для установки свойства типа Control дает сбой VS - PullRequest
1 голос
/ 26 мая 2011

В моем стиле основного элемента управления в generic.xaml я пытаюсь установить значение по умолчанию для свойства моего основного элемента управления (и это свойство имеет тип Control), но это приводит к сбою VS 2010 при использовании MyMainControl ввид дизайна.Проблема может быть замечена, используя код ниже.Я использую Silverlight 4. Я также пытался указать MyControl в качестве ресурса (как показано закомментировано в коде ниже), и это также вызвало сбой VS 2010 при использовании MyMainControl.

Я обнаружил, что если яудалите «DefaultStyleKey = typeof (MyControl)» в конструкторе MyControl, тогда проблема не возникнет (но тогда стиль MyControl не будет применен к нему, и элемент управления будет выглядеть неправильно).

Основная цель здесьчто мне нужно разрешить классу MyMainControl при необходимости создать экземпляр класса MyControl для установки свойства MyControl во время создания экземпляра класса MyMainControl.По умолчанию я хочу, чтобы для свойства MyControl был установлен экземпляр MyControl, но я хочу, чтобы пользователь мог указывать значение NULL (или указывать экземпляр MyControl с другими настройками) для свойства MyControl, в их XAML, и еслиони делают это, я хочу, чтобы внутреннее создание по умолчанию MyControl не происходило (для повышения эффективности MyMainControl).

Я изначально создал экземпляр MyControl в конструкторе MyMainControl, но если пользователь устанавливаетсвойство MyControl, равное нулю, в их XAML MyMainControl, экземпляр MyControl по-прежнему создается без необходимости внутренне (а затем перезаписывается нулем), что приводит к гораздо меньшей производительности (чем просто использование нуля и не создание MyControl внутри).

В WPF я могу указать MyControl как ресурс, а затем в стиле MyMainControl generic.xaml я могу установить для свойства MyControl экземпляр класса MyControl, что значительно повысило производительность MyMainControl, если пользователь устанавливает MyControl на ноль.Но я не смог заставить его работать в Silverlight.

В итоге основная идея заключается в том, что если я смогу использовать стиль MyMainControl, чтобы указать значение по умолчанию дляСвойство MyControl, тогда пользователь сможет указать свой собственный стиль MyMainControl, в котором он может указать для свойства MyControl значение null или экземпляр MyControl с другими настройками - и поскольку его стиль MyMainControl заменит мой, тогда по умолчаниюсоздание экземпляра MyControl, который я указал в моем стиле MyMainControl, не произойдет.

Я очень признателен за любую помощь, которую кто-либо может оказать в том, как это можно сделать в Silverlight!1019 * MyControl - очень простой класс, производный от Control:

public class MyControl : Control
{
    public MyControl()
    {
        DefaultStyleKey = typeof(MyControl);
    }
}

Код для MyMainControl MyControl DependencyProperty:

public partial class MyMainControl : Control
{
...
    public static readonly DependencyProperty MyControlProperty = DependencyProperty.Register("MyControl", typeof(MyControl), typeof(MyMainControl), new PropertyMetadata(null));

    public MyControl MyControl
    {
        get
        {
            return (MyControl)GetValue(MyControlProperty);
        }
        set
        {
            SetValue(MyControlProperty, value);
        }
    }
}
...