2016-07-07 3 views
0

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

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

<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> 

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

Теперь здесь MainWindow которым есть тема Backround aplied к ней (я даже не знаю, как)

<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, если мой фон не был прозрачным, у него был бы простой цветной эфир, который бы смущал его претику.

ответ

1

Если вы хотите динамически менять цвет вашего пользовательского интерфейса, целесообразно использовать DynamicResource. Например, deckare 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 Используется для замены. Куда поменять - это желание разработчика.

+0

Modernui имеет тематическую доску, где пользователь может переключиться на Ligth/темный фон не может быть жестко закодирован «# 455A65» его привязка к некоторому динамическому ресурсу – Zwan

+0

@Zwan, пожалуйста, см. мой обновленный ответ. Не стесняйтесь задавать любые вопросы. – StepUp

+0

посмотрите на код mainwindows, ничего не вызывайте динамически, и у него есть набор фоновых изображений. + у моего usercontrol уже есть размер/цвет шрифта из выбранной строки, это только что-то с фоном, который по умолчанию прозрачен на добавленном представлении. – Zwan

0

Я выкопал приложение FirstFloor Sample и обнаружил, что есть несколько ключей 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

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