Форум программистов, компьютерный форум CyberForum.ru

Программирование Windows Phone

Войти
Регистрация
Восстановить пароль
 
wshadw
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 17
#1

Обновление системных кистей (стилей) на лету - Windows Phone

16.04.2015, 23:22. Просмотров 394. Ответов 0
Метки нет (Все метки)

WP8.1 Runtime C#
Здравствуйте, необходимо обновить цвет системных элементов на лету, т.е. такие как цвет переключателя, цвет выделения листбокса, и подобное. Я нашёл системные кисти, которыми, прописав в app.xaml, в ресурсах, я изменил цвет(при загрузке приложения), но изменение этих кистей из кода c# на лету не даёт должного эффекта. Как можно перезагрузить стили/обновить элементы?
Пс. Мне нужно нечто подобное как в стандартном почтовом клиенте, там в настройках можно сменить цвет фона, и соответственно там меняются и цвета элементов, мгновенно.
Вот как я пытался это сделать
App.xaml:
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<Application
    x:Class="App2.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App2">
    <Application.Resources>
        <Color x:Key="MainBrush">#FF009999</Color>
        <SolidColorBrush x:Key="ProgressBarIndeterminateForegroundThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="ToggleSwitchCurtainBackgroundThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="SliderTrackDecreaseBackgroundThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="ListBoxItemSelectedBackgroundThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="TextSelectionHighlightColorThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="SliderThumbBackgroundThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="SliderThumbBorderThemeBrush" Color="{ThemeResource MainBrush}"/>
        <SolidColorBrush x:Key="ListBoxItemPointerOverForegroundThemeBrush" Color="White" />
        <SolidColorBrush x:Key="ListBoxItemPressedForegroundThemeBrush" Color="White" />
        <SolidColorBrush x:Key="ListBoxItemSelectedForegroundThemeBrush" Color="White" />
        <SolidColorBrush x:Key="ListBoxItemSelectedPointerOverBackgroundThemeBrush" Color="Transparent"/>
        <SolidColorBrush x:Key="ListBoxItemDisabledForegroundThemeBrush" Color="Transparent"/>
        <SolidColorBrush x:Key="ListBoxItemPointerOverBackgroundThemeBrush" Color="Transparent"/>
        <SolidColorBrush x:Key="ButtonPressedBackgroundThemeBrush" Color="Transparent"/>
        <SolidColorBrush x:Key="ListBoxItemPressedBackgroundThemeBrush" Color="Transparent"/>
    </Application.Resources>
</Application>

MainPage.xaml:
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 <Grid>
        <StackPanel>
            <Slider Value="50"/>
            <ListBox SelectedIndex="1" Background="Transparent">
                <TextBlock Foreground="White" Text="TEXT"/>
                <TextBlock Foreground="White" Text="TEXT"/>
                <TextBlock Foreground="White" Text="TEXT"/>
            </ListBox>
            <ToggleSwitch IsOn="True"/>
            <ProgressBar Height="10" Margin="0,20" IsIndeterminate="True"/>
            <Rectangle Height="30">
                <Rectangle.Fill>
                    <SolidColorBrush x:Name="RectBrush" Color="{ThemeResource MainBrush}"></SolidColorBrush>
                </Rectangle.Fill>
            </Rectangle>
 
            <Button Click="ButtonBase_OnClick" HorizontalAlignment="Center" Margin="0,60,0,0" Content="ИЗМЕНИТЬ ЦВЕТ ВСЕГО ЭТОГО"/>
        </StackPanel>
    </Grid>

MainPage.cs:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            var c = Color.FromArgb(255, 200, 0, 200);
 
            RectBrush.Color = c; //прямой способ, естественно работает
 
            Application.Current.Resources["MainBrush"] = c;
            Application.Current.Resources["ProgressBarIndeterminateForegroundThemeBrush"] = c;
            Application.Current.Resources["ToggleSwitchCurtainBackgroundThemeBrush"] = c;
            Application.Current.Resources["SliderTrackDecreaseBackgroundThemeBrush"] = c;
            Application.Current.Resources["ListBoxItemSelectedBackgroundThemeBrush"] = c;
            Application.Current.Resources["TextSelectionHighlightColorThemeBrush"] = c;
            Application.Current.Resources["SliderThumbBackgroundThemeBrush"] = c;
            Application.Current.Resources["SliderThumbBorderThemeBrush"] = c;
        }

Вот файл этого тестового проектаApp2.7z

Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2015, 23:22     Обновление системных кистей (стилей) на лету
Посмотрите здесь:

C# ASP.NET Обновление файлов сервера на лету и потоки.
MS Word Как в документе отменить автоматическое обновление ВСЕХ стилей?
обновление данных "на лету" при вводе jQuery
C++ WinAPI Информация из контекста(количество кистей). Ошибка
C# WPF Смена стилей "на лету" (ResourceDictionary)
Joomla Смена стилей "на лету"
Windows Phone Обновление приложение Win Phone
MS Access Как запретить вывод системных сообщений и вместо системных сообщений открыть Form1?
Windows Phone Обновление оффлайн хранилища SQLite
Windows Phone Обновление приложения
Windows Phone Обновление приложения без потери пользовательских данных
HTML, CSS обновление стилей в браузере

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru