Как установить шрифт, фон и т. Д., Которые будут наследоваться всеми элементами управления на странице? - PullRequest
1 голос
/ 07 декабря 2011

Мое намерение - переопределить тему телефона. По умолчанию разметка страницы имеет следующий код:

<phone:PhoneApplicationPage 
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"

Я заменяю его ссылкой на стиль:

<phone:PhoneApplicationPage 
Style="{StaticResource stylePage}"    

Стиль определяется в ресурсах приложения следующим образом:

<Application.Resources>
    <Style x:Key="stylePage" TargetType="phone:PhoneApplicationPage">
        <Setter Property="Background" Value="White" />
        <Setter Property="Foreground" Value="DeepSkyBlue" />
        <Setter Property="FontFamily" Value="Arial" />
    </Style>
</Application.Resources>

Но фон все еще черный, а шрифт белый. Отладчик показывает, что значения были применены. Если я устанавливаю фон сетки VisualRoot, он применяется, но я хочу установить значения fontfamily и foreground, которые будут использоваться всеми моими элементами управления по умолчанию. Возможно ли это?

1 Ответ

2 голосов
/ 09 декабря 2011

Согласно этой статье MSDN - в визуальном дереве в Silverlight наследуются только следующие свойства: FontFamily, FontSize, FontStretch, FontStyle, FontWeight и Foreground.Обычно - свойства зависимостей не наследуются в Silverlight (они часто находятся в WPF).Вероятно, именно поэтому они не упомянуты в статье MSDN Silverlight о приоритете значения свойства зависимости , но версия WPF статьи упоминает унаследованное значение как более низкий приоритет, чем локальное значение или стильсеттера.Ваше решение на самом деле работает в некоторой степени, но по умолчанию - большинство элементов управления имеют свойства шрифта, установленные их стилем - кнопки по стилю по умолчанию, TextBlocks в шаблонах страниц используют PhoneTextNormalStyle или PhoneTextTitle1Style.Если вы удалите атрибуты XML, задающие стиль ваших TextBlocks - ваши свойства шрифта для всего приложения будут применяться к TextBlocks.

К сожалению, свойство зависимости от фона не наследуется, поэтому ваш фон останется таким, как есть.

Ваши свойства на уровне приложения не будут работать с элементами управления, более сложными, чем TextBlocks - например, Buttons, поскольку стиль по умолчанию для кнопок и других элементов управления определяет стиль TextBlocks, явно используя соответствующие системные стили.

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

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