Расширение стиля пользовательского элемента управления в xaml

Я занимаюсь разработкой приложения WPF и создал пользовательский элемент управления, назовем его "CControl". В документе xaml, где я разрабатываю макет моего приложения. Я импортирую стиль с:

xmlns:my="clr-namespace:My.Controls"

и я могу использовать контроль просто отлично. Проблема в том, что я хочу расширить стиль в CControl. В Словаре ресурсов я могу установить:

        <Style TargetType="{x:Type my:CControl}">
            <Setter Property="Margin" Value="5 0 5 3" />
        </Style>

Это применяет стиль к элементу управления, но не импортирует стиль, определенный CControl, поэтому я использую:

        <Style TargetType="{x:Type my:CControl}" BasedOn="{StaticResource {x:Type my:CControl}}">
            <Setter Property="Margin" Value="5 0 5 3" />
        </Style>

Проблема в том, что когда мой фреймворк пытается загрузить xaml, я получаю следующее исключение:

System.Windows.Markup.XamlParseException occurred
  Message='Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '18' and line position '54'.
Source=PresentationFramework
LineNumber=18
LinePosition=54
StackTrace:
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, Boolean skipJournaledProperties, Uri baseUri)
   at System.Windows.Markup.XamlReader.Load(XamlReader xamlReader, ParserContext parserContext)
   at System.Windows.Markup.XamlReader.Load(XamlReader reader)
   at FATPOT.Whiteboard.Report.Show() in C:\...\Report.cs
InnerException: 
   Message=Cannot find resource named 'My.Controls.CControl'. Resource names are case sensitive.
   Source=PresentationFramework
   StackTrace:
        at System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference)
        at System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider)
        at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
   InnerException: 

Я пробовал разные способы использования BasedOn и ничего не получил работать. Любая помощь будет чрезвычайно полезна.

Спасибо

мистифицировать

1 ответ

Решение

После одного дня попыток расширить стиль пользовательского элемента управления я наконец смог заставить его работать. Вы можете использовать элемент управления, определив пространство имен, но если вы хотите расширить стиль элемента управления, вам необходимо включить ResourceDictionary для элемента управления. Я закончил тем, что добавил:

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/My.Project;component/Resources/CControl.xaml" />
        </ResourceDictionary.MergedDictionaries>

к моему ResourceDictionary в моих приложениях WPF Canvas / Xaml.

Другие вопросы по тегам