Настройка элемента BulletChrome в WPF - PullRequest
1 голос
/ 18 июля 2009

Я пытаюсь настроить внешний вид флажка в WPF. Я надеялся, что смогу получить шаблон элемента управления по умолчанию для класса BulletChrome, определенный в PresentationFramework.Aero, и работать с ним. Однако BulletChrome не является подклассом Control, поэтому шаблон для изменения отсутствует. Кто-нибудь знает, что я мог сделать это?

Ответы [ 3 ]

3 голосов
/ 20 июля 2009

Если вы хотите поместить какой-нибудь 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 и пытаетесь адаптировать и переписывать его под свои нужды, либо бросаете свой собственный шаблон / декоратор / что угодно с нуля. (Но тогда действительно не важно, что вы используете, пока оно работает, верно?)

Надеюсь, это ответило на ваш вопрос, ура.

1 голос
/ 18 июля 2009

Ты не хочешь этого делать. Изменение шаблона элемента управления не должно изменять поведение элемента управления, а элемент управления CheckBox по определению имеет три состояния (Checked, Unchecked, Indeterminate).

Вам лучше создать пользовательский элемент управления с 4 состояниями (или, если хотите, n-состоянием), который заимствует много элементов Look / Feel из CheckBox ControlTemplate.

0 голосов
/ 20 июля 2009

Если BulletChrome не настраивается, его нельзя настроить. Но вы определенно можете заменить его на что-то настраиваемое.

В практическом плане я бы предложил начать с темы Silverlight вместо Aero.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...