2015-08-22 3 views
2

Я пишу приложение для универсальной платформы Windows с использованием темной темы, и я заметил, что, хотя я правильно настроил заданную тему темным, когда я показываю модальное диалоговое окно, используя ContentDialog класса наложение облегчает общую страницу, а не затемняет ее.Настройка цвета фона наложения для ContentDialog

Перед диалоге отображается:

Screenshot of page before overlay

С диалога отображаются:

Screenshot of page after overlay displayed

Поскольку существует не свойство на ContentDialog контролировать накладку как я переопределить цвет существо используемый?

ответ

7

После нескольких экспериментов я обнаружил, что кисть используется для управления цветом наложения, который отображается над ContentDialog является SystemControlPageBackgroundBaseMediumBrush, а не более вероятно, глядя ContentDialogDimmingThemeBrush.

Проверяя определения темы по умолчанию, то выясняется, что как светлые и темные темы установить эту кисть в цветовом ресурс SystemBaseMediumColor который на световую тему #99000000 и на темную теме является #99FFFFFF. Это приводит к тому, что наложение затеняет светлую тему и осветляет темную тему.

С SystemBaseMediumColor ссылки других определений кистей, такие как те, которые используются для неактивных стержневых заголовков, необходимо переопределить SystemControlPageBackgroundBaseMediumBrush, а не цвет, который он ссылается исключительно на темную тему.

Для этого нам нужно переопределить кисть в словаре тематического ресурса в App.xaml или в файле XAML ресурс объединено в App.xaml вдоль линий:

<Application> 

    <Application.Resources> 

     <ResourceDictionary> 

      <ResourceDictionary.ThemeDictionaries> 

       <ResourceDictionary x:Key="Dark"> 

        <SolidColorBrush 
         x:Key="SystemControlPageBackgroundBaseMediumBrush" 
         Color="#99000000" 
         /> 

       </ResourceDictionary> 

      </ResourceDictionary.ThemeDictionaries> 

     </ResourceDictionary> 

    </Application.Resources> 

</Application> 
+0

Очень хорошая работа, теперь, когда мы находимся в деталях, вы видели, когда изменение размера окна приложения имеет пустой белый фон и находится ниже корневого фрейма (потому что я установил изображение в корневом фрейме). Любая идея изменить этот цвет? Я считаю внутренним. Кроме того, я должен видеть, как отклонить contentdialog, когда граница коснулась. Я понимаю, что мне придется отредактировать шаблон. –

1

Я использовал код для принятого ответа, но изменение цвета этой кисти работало для меня ... «SystemControlPageBackgroundMediumAltMediumBrush» Может быть, потому, что я использую Anniversary Edition, поскольку я читаю here

Также убедитесь, что ваш ключ словаря ресурса соответствует теме, которую вы используете. Я был с помощью «Light» тема, поэтому я изменил словарь Ресурсный х: ключ к этому ...

<ResourceDictionary x:Key="Light">

0

Попробуйте код ниже.

/// <summary> 
    /// Set the Overlay background for content Dialog 
    /// </summary> 
    /// <param name="subTree">Content Dialog reference</param> 
    public static void SetContentDialogOverlay(UIElement subTree) 
    { 

     var hostparent = VisualTreeHelper.GetParent(subTree); 
     var rect = FindVisualChild<Rectangle>(hostparent); 
     rect.Fill = new SolidColorBrush(Colors.Black); 
     rect.Opacity = 0.7; 

    } 

    /// <summary> 
    /// Find the child element from UIContainer 
    /// </summary> 
    /// <typeparam name="T"> Type</typeparam> 
    /// <param name="depObj"> Dependency Reference </param> 
    /// <returns></returns> 
    public static T FindVisualChild<T>(DependencyObject depObj) where T : DependencyObject 
    { 
     if (depObj != null) 
     { 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
      { 
       DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
       if (child != null && child is T) 
       { 
        return (T)child; 
       } 

       T childItem = FindVisualChild<T>(child); 
       if (childItem != null) return childItem; 
      } 
     } 
     return null; 
    } 

Теперь позовите вышеупомянутый метод на вашем коде позади, как это ----

// Based upon your access modifier i.e. public/private or protected 
    SetContentDialogOverlay(this); 

Здесь «это» представляет Content Dialog ссылку или вы можете передать ссылку на объект из ContectDialog.

Надеюсь, это поможет вам изменить цвет наложения. Happy Coding ..:)

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