FrameworkElement
s и их подклассы не просто ищут ресурс, используя тип элементов управления, они используют значение DefaultStyleKey. Обычной практикой для большинства подклассов Control (и некоторых других FrameworkElement
s) является переопределение значения по умолчанию этого свойства зависимости в статическом конструкторе на тип элемента управления, но подклассы UserControl
обычно не беспокоят.
static Foo()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Foo), new FrameworkPropertyMetadata(typeof(Foor));
}
Если вы этого не сделали в своем SmartTaskOverview
, он будет искать свой стиль по умолчанию, используя typeof(UserControl)
в качестве ключа ресурса, а не typeof(SmartTaskOverview)
.
Примечание. UserControl
потребует, чтобы шаблон элемента управления отображал его дочерние элементы, это обычно предоставляется стилем по умолчанию для UserControl
, но, изменив ключ, он найдет ваш стиль по умолчанию. Чтобы решить эту проблему, просто основывайте свой стиль на стиле UserControl
.
<Style TargetType="local:SmartTaskOverview" BasedOn="{StaticResource {x:Type UserControl}}">
<Setter Property="Margin" Value="50,50,50,50" />
</Style>
В качестве альтернативы вы можете сами предоставить простой шаблон.
<Style TargetType="local:SmartTaskOverview">
<Setter Property="Margin" Value="50,50,50,50" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:SmartTaskOverview}">
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
person
Brian Reichle
schedule
30.11.2015