XAML: есть ли способ стилизовать свойство заголовка TreeViewItem, чтобы оно содержало несколько стилей шрифта?

Мне нужно создать контроллер типа TreeView, который будет отображать форматированный текст.

Пример:

Подписано имя пользователя

Сертифицировано по Имени человека

Содержимое TreeViewItem легко, так как я могу просто поместить TextBlock внутри, но заголовок не позволяет использовать несколько объявлений стилей шрифта.

Я действительно новичок в XAML и работаю в ExpressionBlend (хотя я не уклоняюсь от кодирования). Я был бы очень признателен, если бы кто-то подтолкнул меня в правильном направлении.


person Lukigi    schedule 20.06.2012    source источник


Ответы (1)


Вы можете поместить «Выполнить» в TextBlock, чтобы изменить шрифт.

e.g.

<TextBlock>Hello<Run FontStyle="Bold">World</Run></TextBlock>

Вы можете установить содержимое заголовка на все, что хотите

<TreeViewItem>
    <TreeViewItem.Header>
        <TextBlock>Hello<Run FontStyle="Bold">World</Run></TextBlock>
    </TreeViewItem.Header>
</TreeViewItem>

Когда вы делаете это:

<TreeViewItem>Hello</TreeViewItem>

Вы не сообщаете синтаксическому анализатору XAML, в какое свойство вы хотите поместить «Hello». Синтаксический анализатор XAML рассмотрит тип (TreeViewItem) и увидит, какой из них установлен как «ContentProperty», в данном случае это свойство с именем «Header». Поскольку вы не указали, что такое «Привет», предполагается, что это строка. Поскольку строка не может отображаться как содержимое в WPF, необходимо создать элемент управления для отображения строки. ValueConverter для TreeViewItem настроен на предоставление элемента управления TextBlock и установку текста этого элемента управления на введенную вами строку. Так что то, что происходит за кулисами, намного больше, чем вы можете видеть :)

Все это вы можете делать с помощью собственных элементов управления.

Вам, вероятно, следует прочитать о шаблонах WPF, элементах управления содержимым, презентаторе содержимого, стилях и т. д. Есть много мощных вещей, которые вы можете сделать с WPF — например, сделать каждую кнопку в вашем приложении одинаковой компоновкой и стилем и добавить изображение перед кнопкой без кода (всего несколько строк XAML)

Посмотрите здесь руководство для начинающих по созданию шаблонов

http://msdn.microsoft.com/en-us/magazine/cc163497.aspx

person Charleh    schedule 20.06.2012
comment
Спасибо, Чарле. Я не знал, что можно использовать ‹TreeViewItem.Header› вместо ‹TreeViewItem Header=›. Я думаю, это то, что вы получаете за изучение XAML из кода Expression Blend. Работает отлично! - person Lukigi; 20.06.2012
comment
Нет проблем, теперь приступайте к кодированию... декларативно! - person Charleh; 20.06.2012