Использование Style Setter в generic.xaml для установки свойства типа Control дает сбой VS
В моем стиле основного элемента управления в 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 значение NULL в своем XAML MyMainControl, экземпляр MyControl по-прежнему создается без необходимости внутренне (а затем перезаписывается с помощью NULL), что приводит к гораздо меньшей производительности (чем просто использование нуля, а не создание MyControl внутри).
В WPF я могу указать MyControl как ресурс, а затем в стиле MyMainControl generic.xaml я могу установить свойство MyControl для экземпляра класса MyControl, что значительно улучшило производительность MyMainControl, если пользователь устанавливает MyControl на ноль. Но я не смог заставить его работать в Silverlight.
Таким образом, основная идея заключается в том, что если я смогу использовать стиль MyMainControl для указания значения по умолчанию для свойства MyControl, то пользователь сможет указать свой собственный стиль MyMainControl, в котором он может указать для свойства MyControl значение null или экземпляр MyControl с другими настройками - и поскольку их стиль MyMainControl заменит мой, то создание экземпляра MyControl по умолчанию, которое я указываю в своем стиле MyMainControl, не произойдет.
Я очень ценю любую помощь, которую кто-либо может предоставить, о том, как это можно сделать в Silverlight!
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNamespace"
>
<Style TargetType="local:MyControl">
<Setter Property="Opacity" Value="1" />
</Style>
<!-- Note: I tried specifying my control as a resource
(so I could in the MyMainControl style set the property to
the MyControl StaticResource), but include this line of XAML
causes VS 2010 to crash when using my main control.
<local:MyControl x:Key="MyControl" />-->
<Style TargetType="local:MyMainControl">
<Setter Property="MyControl" >
<Setter.Value>
<local:MyControl />
</Setter.Value>
</Setter>
</Style>
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);
}
}
}