Если вы хотите поместить какой-нибудь BulletChrome в шаблон CheckBox ', куда будет идти BulletDecorator в классическом шаблоне, вы можете сделать это, поскольку BulletChrome наследуется от Декоратор , который наследуется от FrameworkElement .
Следующая часть, как BulletChrome выглядит? Ну, это одна из редких частей WPF, где они обрабатывают рендеринг полностью без xaml: внешний вид ButtonChrome определяется в его методе OnRender()
.
BulletChrome.OnRender (), от отражателя:
protected override void OnRender(DrawingContext drawingContext)
{
Rect bounds = new Rect(0.0, 0.0, base.ActualWidth, base.ActualHeight);
this.DrawBackground(drawingContext, ref bounds);
this.DrawDropShadows(drawingContext, ref bounds);
this.DrawBorder(drawingContext, ref bounds);
this.DrawInnerBorder(drawingContext, ref bounds);
}
К сожалению, поскольку все эти методы, вызываемые внутри OnRender (), являются частными, вы не можете связываться с ними, даже если вы создаете подкласс ButtonChrome, возможно, только перекрывая часть вашего рендеринга сверху.
В общем, вы либо начинаете копаться в коде рендеринга в Reflector и пытаетесь адаптировать и переписывать его под свои нужды, либо бросаете свой собственный шаблон / декоратор / что угодно с нуля. (Но тогда действительно не важно, что вы используете, пока оно работает, верно?)
Надеюсь, это ответило на ваш вопрос, ура.