Ваше требование немного странно, но оно выполнимо несколькими способами ...
Вместо того, чтобы иметь другой элемент управления контентом (например, me
), почему бы не установить this
Контент самого элемента управления?
this.Content
= (ContentControl)_parent.FindResource("CircleRes");
((ContentControl)(this.Content)).Style
= (Style)_parent.FindResource("CircleStyle"); //*** Potential problem
Проблема : Постановка потенциальной проблемы помечена таким образом, потому что ваш код (и мой тоже) устанавливает стиль "CircleStyle"
на "CircleRes"
ресурс по ссылке.
Как?me
или ((ContentControl)(this.Content))
- это не что иное, как ресурс "CircleRes"
!
Это означает, что если "CircleRes"
упоминается в каком-то другом месте, он будет нести "CircleStyle"
как свой собственный стиль вместе с ним.И если вы установите новый Style
на "CircleRes"
где-то еще, то будет перезаписывать Style
из "CircleRes"
везде, где используется, включая приведенный выше код (где предполагаемый стиль "CircleStyle"
)
Решение : вместо этого используйте ContentTemplate
.Шаблоны не вызывают визуальные ссылки по экземпляру.
Таким образом, на самом деле вы должны иметь DataTemplate (скажем, "CircleResTemplate") и установить его как ContentTemplate в класс CircleElement
.
this.ContentTemplate
= (DataTemplate)_parent.FindResource("CircleResTemplate");
this.Style
= (Style)_parent.FindResource("CircleStyle");
Дайте мне знать, если это ответит на ваш вопрос.