Используя дорогие инструкции @Mario Vernari, я обнаружил, что проблема была в плохой стратегии, которую я использовал для создания своего UserControl. Я хотел создать UserControl, который мог бы содержать некоторые другие. Итак, я попробовал это:
<UserControl x:Class="MyNamespace.MyUserControl"
...
Style="{DynamicResource ResourceKey=MyUserControlStyle}">
<UserControl.Resources>
...
<Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
<Border BorderBrush="{Binding Path=DP1}">
...
<ContentPresenter ... Content="{TemplateBinding Content}"/>
...
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
Где DP1
- свойство зависимости типа Brush
. UserControl, созданный этим способом, работает, если вы устанавливаете его свойства (например, DP1
) напрямую. Абсолютно, это не верный путь, как @Mario сказал мне:
... Когда вы используете UserControl, это означает, что вы уже знаете его макет, и нет необходимости дополнительно стилизовать элемент управления. Вы определяете его стиль дважды одновременно , что приводит к столкновению ...
И добавил:
Вместо этого вы должны использовать CustomControl; Определите стиль по умолчанию в папке Themes (если у вас есть обычная Visual Studio, она создается автоматически). После этого вы можете переопределить стиль по умолчанию в вашем собственном приложении. Точно так же, как и для обычного базового класса и его производного.
Следуйте этому:
http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...
Очевидно, что в этом случае нам нужно получить наш элемент управления без учета класса ContentControl
(вместо Control
класса). Вы можете взглянуть на это & это , чтобы освоить детали.
Здесь я снова благодарю @Mario. ;)