ModernUI: применить текущую тему к UserControl BackGround

Как я могу применить цвет фона ModernUI (темный/светлый) к пользовательскому элементу управления? Я успешно извлек и применил цвет акцента, но не могу понять, как применить темный/светлый цвет фона. По умолчанию фон моего UserControl прозрачен.

Вот как я применил цвет accent (это работает):

<UserControl x:Class="GenkaiModern.Pages.DetailView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:GenkaiModern.Pages" 
              xmlns:mui="http://firstfloorsoftware.com/ModernUI"
             mc:Ignorable="d" 

             d:DesignHeight="399.533" d:DesignWidth="751.402" Width="720" Height="350" Background="{DynamicResource Accent}" >
</UserControl>

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

теперь вот главное окно, к которому применена фоновая тема (я даже не знаю, как)

<mui:ModernWindow
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mui="http://firstfloorsoftware.com/ModernUI"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="GenkaiModern.MainWindow"
        Title="Genkai Client" IsTitleVisible="True"
        LogoData="F1 M 24.9015,43.0378L 25.0963,43.4298C 26.1685,49.5853 31.5377,54.2651 38,54.2651C 44.4623,54.2651 49.8315,49.5854 50.9037,43.4299L 51.0985,43.0379C 51.0985,40.7643 52.6921,39.2955 54.9656,39.2955C 56.9428,39.2955 58.1863,41.1792 58.5833,43.0379C 57.6384,52.7654 47.9756,61.75 38,61.75C 28.0244,61.75 18.3616,52.7654 17.4167,43.0378C 17.8137,41.1792 19.0572,39.2954 21.0344,39.2954C 23.3079,39.2954 24.9015,40.7643 24.9015,43.0378 Z M 26.7727,20.5833C 29.8731,20.5833 32.3864,23.0966 32.3864,26.197C 32.3864,29.2973 29.8731,31.8106 26.7727,31.8106C 23.6724,31.8106 21.1591,29.2973 21.1591,26.197C 21.1591,23.0966 23.6724,20.5833 26.7727,20.5833 Z M 49.2273,20.5833C 52.3276,20.5833 54.8409,23.0966 54.8409,26.197C 54.8409,29.2973 52.3276,31.8106 49.2273,31.8106C 46.127,31.8106 43.6136,29.2973 43.6136,26.197C 43.6136,23.0966 46.127,20.5833 49.2273,20.5833 Z"          
        ContentSource="/Pages/Home.xaml" d:DesignWidth="1070.985" d:DesignHeight="664.851">

    <mui:ModernWindow.MenuLinkGroups>
        <mui:LinkGroup DisplayName="Administration" GroupKey="Administration">
            <mui:LinkGroup.Links>
                <mui:Link DisplayName="Machine" Source="/Pages/NewComputerView.xaml" />
                <mui:Link DisplayName="Ecrans" Source="/Pages/Home.xaml"/>
                <mui:Link DisplayName="Imprimantes" Source="/Pages/Home.xaml" />
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
        <mui:LinkGroup DisplayName="settings" GroupKey="settings">
            <mui:LinkGroup.Links>
                <mui:Link DisplayName="Application" Source="/Pages/SettingsPage.xaml" />
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
        <mui:LinkGroup DisplayName="Login" GroupKey="Login">
            <mui:LinkGroup.Links>
                <mui:Link DisplayName="Login" Source="/Pages/AutentificationView.xaml" />
            </mui:LinkGroup.Links>
        </mui:LinkGroup>
    </mui:ModernWindow.MenuLinkGroups>

    <mui:ModernWindow.TitleLinks>
        <mui:Link DisplayName="Administration" Source="/Pages/NewComputerView.xaml" />
        <mui:Link DisplayName="Login" Source="/Pages/AutentificationView.xaml" />
        <mui:Link DisplayName="settings" Source="/Pages/SettingsPage.xaml" />
        <mui:Link DisplayName="help" Source="https://github.com/firstfloorsoftware/mui" />
    </mui:ModernWindow.TitleLinks>

</mui:ModernWindow>

Насколько я понимаю, поскольку в моем шрифте usercontrole используется тема шрифта modernui, если бы мой фон не был прозрачным, у него был бы правильный цвет эфира темный / светлый, что довольно запутанно.


person Zwan    schedule 07.07.2016    source источник


Ответы (2)


Если вы хотите динамически менять цвет вашего пользовательского интерфейса, уместно использовать DynamicResource. Например, запишите SolidColorBrush в App.xaml:

<Application.Resources>
    <SolidColorBrush x:Key="DynamicColor" />
</Application.Resources>

И в вашем контроле вы должны выполнить привязку через DynamicResource:

<UserControl x:Class=""
     <!--The code is omitted for the brevity-->        
     d:DesignHeight="600" d:DesignWidth="800">
    <Grid Name="mainGrid" Background="{DynamicResource DynamicColor}">    

    </Grid>
</UserControl>

Затем, чтобы изменить Resource, вы должны:

Application.Current.Resources["YourResource"] = YourNewValue;

Позвольте мне показать пример, как значение может быть изменено:

private void Window_ContentRendered(object sender, EventArgs e)
{
    SolidColorBrush YourBrush = (Brush)(new BrushConverter().ConvertFrom("#455A65"));;

    // Set the value
    Application.Current.Resources["DynamicColor"] = YourBrush;         
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    SolidColorBrush YourBrush = Brushes.Orange;

    // Set the value
    Application.Current.Resources["DynamicColor"] = YourBrush;
}

DynamicResources используются для изменения. Где менять - это пожелание разработчика.

person StepUp    schedule 07.07.2016
comment
Modernui имеет доску тем, где пользователь может переключаться на светлый / темный фон, не может быть жестко закодирован # 455A65, он привязан к какому-то динамическому ресурсу. - person Zwan; 07.07.2016
comment
@Zwan, пожалуйста, посмотрите мой обновленный ответ. Не стесняйтесь задавать любые вопросы. - person StepUp; 07.07.2016
comment
взгляните на код mainwindows, ничего не называйте динамическим, и у него есть фоновый набор. + мой пользовательский элемент управления уже имеет размер / цвет шрифта из выбранной темы, это просто что-то с фоном, который по умолчанию прозрачен в добавленном представлении. - person Zwan; 07.07.2016

Я просмотрел образец приложения FirstFloor и обнаружил, что для форматирования темы используется несколько ключей DynamicResource. Я смог получить цвет фона окна моей темы, используя это:

<SolidColorBrush x:Key="BackgroundBrush" Color="{DynamicResource WindowBackgroundColor}" />

затем использовать его где-нибудь, например...

<DataGrid Background="{StaticResource BackgroundBrush}" />

Есть и другие ключи DynamicResource, в том числе

{DynamicResource WindowText} // for WindowForegroundColor
{DynamicResource WindowBorder} // for WindowBorderBrush
{DynamicResource WindowBackgroundColor} // for WindowBorderBackgroundBrush
{DynamicResource DefaultFontFamily} // 
{DynamicResource DefaultFontSize} // 

Я нашел их, просматривая код из источника MUI-master. Чтобы узнать больше, откройте mui-master.sln и перейдите к проекту FirstFloor.ModernUI (библиотека классов) /Themes/ModernWindow.xaml и /Themes/ModernDialog.xaml.

person epicTurk    schedule 12.10.2016