2013-11-18 2 views
2

У меня есть требование создать кнопку в приложении Windows 8.1, в котором есть значок и текстовая метка. Значок будет символом символов Segoe UI, а текстовой надписью будет Segoe UI Semibold с меньшим размером текста.Пользовательская кнопка в приложении Windows 8.1

Я хочу, чтобы иметь возможность повторно использовать кнопку в разных местах приложения, используя разные значки и текстовые метки.

Как я могу это сделать? Я мог бы создать кнопку, а затем отредактировать ContentPresenter, чтобы иметь горизонтально ориентированную панель стека с двумя текстовыми блоками, но как я могу ее повторно использовать? И как я могу изменить текст в двух разных текстовых блоках?

Должен ли я создать отдельный настраиваемый элемент управления с отдельными свойствами зависимостей для каждой строки текстового блока? Мне интересно узнать, что вы будете делать.

благодаря

ответ

5

Создание простой Style. Чтобы это стало проще, я бы основал его на стандартизованном стиле AppBarButton. Вы можете отформатировать его до любого размера (я сделал что-то похожее, чтобы сделать большую кнопку или одну с текстом сбоку).

Имейте в виду, что главная иконка - это ContentPresenter, которая привязывается к Content, используя TemplateBinding. Обязательно установите FontFamily на Segoe UI Symbol. Поместите текстовую этикетку с AutomationProperties.Name, аналогично тому, как это делает стиль AppBarButton.

Затем, когда вы хотите использовать это просто сделать:

<Button Style="{StaticResource MyCustomButtonStyle}" 
     Content="&#xe000;" // Where "000" is replaced by the number of the icon you wish to use. 
     AutomationProperties.Name="Text Label"/> 

Это должно быть расширяемым и легко воспроизводимы в любое место, что вам нужно. При копировании по типу AppBarButton я предлагаю удалить пределы искусственного размера (в частности, ширину основного содержимого Grid). I do предлагают либо указать текстовую метку фиксированного размера, либо потянуть ее размер от указанного родителя Width, так что он будет Wrap правильно.

Надеюсь, что это поможет и счастливое кодирование!

+0

Привет, AppBarButtonStyle устарел в 8.1. http://msdn.microsoft.com/en-us/library/windows/apps/jj662743.aspx Но спасибо за подсказку, я посмотрю, как я могу вытащить текст текстовой метки из AutomationProperties.Name. – krisdyson

+0

Стиль действительно устарел, но вы все равно можете вытащить тот, который был использован в 8, и скопировать его прямо. Никто не говорит, что вы не можете! –

2

Желаете ли вы создать что-то вроде AppBar? Взгляните на AppBarButton и стиль/типы, которые он поддерживает. В Windows 8.1 мы добавили некоторые вещи вокруг SymbolIcon. Поскольку в основном вы хотите создать два «контента» для своего стиля, вам придется повторно назначить одно свойство (если только вы не создадите настраиваемый элемент управления, который не нужен для этого сценария). Использование AutiomationProperties.Name для видимой метки - хорошая идея, потому что она также будет способствовать доступности по умолчанию для этих пользователей.

Изучите стиль AppBarButton, чтобы вы начали.

+0

Я попытался создать новый стиль BasedOn = "AppBarButtonStyle", но этот стиль устарел в 8.1. Кроме того, для меня больше не требуется StandardStyles.xaml. В основном я пытаюсь создать кнопку в панели навигации левой панели, которая немного похожа на навигационные кнопки приложения Twitter. спасибо за вашу помощь, я буду исследовать дальше. Приятно знать, что это не сценарий пользовательского контроля, поскольку это казалось излишним. – krisdyson

+0

Я нашел свое решение: используйте кнопку «Радио», а затем создайте для него собственный стиль с шаблоном управления. Отлично. У меня есть эти кнопки в пользовательском элементе «Навигация» на стандартной странице, поэтому теперь мне нужно всего лишь выяснить, как я могу связать, какие из переключателей отмечены, в модель представления страницы. Я думаю, что решение будет зависеть от свойства управления навигацией, связанного с свойством INotifyPropertyChange на виртуальной машине главной страницы. Хммм ... добираться туда! :-) – krisdyson

Смежные вопросы