Главная » Разработка для Windows Phone 7 » Стили темы и приоритетность

0

Проведем небольшой, но любопытный эксперимент. Поместим в сетку для содержимого простой TextBlock с очень большим размером текста (FontSize):

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Hello!"

FontSize="9 6"

HorizontalAlignment="Center" VerticalAlignment="Center" />

</Grid>

Как известно, задание FontSize можно перенести из тега TextBlock в PhoneApplicationPage, и эффект останется тем же:

<phone:PhoneApplicationPage …

FontSize="9 6" … >

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Hello!"

HorizontalAlignment="Center" VerticalAlignment="Center" />

</Grid>

</phone:PhoneApplicationPage>

Это пример наследования свойств в действии. Теперь поместим TextBlock в Button. Размер текста можно задать, используя свойство FontSize объекта TextBlock:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button HorizontalAlignment="Center" VerticalAlignment="Center">

<TextBlock Text="Hello!"

FontSize="9 6" />

</Button> </Grid>

Или того же эффекта можно достичь, задавая FontSize самого Button:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="9 6"> <TextBlock Text="Hello!" /> </Button> </Grid>

А вот если задать FontSize для PhoneApplicationPage, ничего не получится, хотя, кажется, наследование свойств должно обеспечивать передачу этого значения в TextBlock:

<phone:PhoneApplicationPage …

FontSize="9 6" … >

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Text="Hello!" /> </Button> </Grid>

</phone:PhoneApplicationPage>

Но ничего не получается. Что-то мешает TextBlock наследовать это значение FontSize.

Класс Button описан в библиотеке System.Windows. Также эта библиотека содержит стиль и шаблон по умолчанию для Button, что называют стилем темы. Для Button стиль темы включает свойство FontSize. Этого нет в обычном Silverlight, но разработчики Windows Phone 7, вероятно, решили, что по умолчанию текст в Button должен быть несколько крупнее, чтобы обеспечить большую мишень для касания. Поэтому они включили в стандартный стиль темы свойство FontSize, и этот параметр имеет приоритет над наследованием свойств.

Вспомним схему приоритетности свойств, которую мы составили в главе 7, и дополним ее: Локальные параметры имеют приоритет над Параметрами стиля, которые являются более приоритетными, чем Стиль темы, который является более приоритетным, чем Унаследованные свойства, которые имеют приоритет над Значениями по умолчанию

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии