locked
Проблемы с фоном в разделе настройки RRS feed

  • Вопрос

  • Всем привет! 

    В приложении настройки изначально выглядят как на рисунке 1, то есть цвета соответствуют установленной темы на компьютере, но при переходе, например в "разрешения" все становится как на рисунке 2(черную рамку нарисовал для наглядности). Не нравится мне, что цвет фона белый. Вопрос простой как исправить.... причем в приложение с белым фоном открывается и MessageDialog. В App.xaml прописал RequestedTheme="Dark", но эффекта нуль. Что делать!? Заранее спасибо

    27 апреля 2013 г. 16:50

Ответы

  • Привет!

    Можно создать собственный UserControl допустим вот с такой разметкой:

    <UserControl
        x:Class="TestApp.Options"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="768"
        d:DesignWidth="435">
        <Border BorderBrush="Black" BorderThickness="1,0,0,0">
            <Grid Background="Black" VerticalAlignment="Stretch">
    
                <!-- Root grid definition -->
                <Grid.RowDefinitions>
                    <RowDefinition Height="80" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
    
                <!-- Header area for panel -->
                <Grid Background="#FF00709F" Grid.Row="0">
                    <Grid Margin="40,27,17,8">
                        <Grid.Transitions>
                            <TransitionCollection>
                                <EntranceThemeTransition FromHorizontalOffset="50" />
                            </TransitionCollection>
                        </Grid.Transitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="60" />
                            <ColumnDefinition Width="14*" />
                            <ColumnDefinition Width="5*" />
                        </Grid.ColumnDefinitions>
                        <Button Margin="-11,-6,0,5" Grid.Column="0" x:Name="BackBtt" Width="50" Height="46" HorizontalAlignment="Left" 
                                BorderThickness="0" Style="{StaticResource BackButtonStyle}" Click="BackBtt_OnClick"/>
                        <TextBlock x:Uid="SoundOptionTitle" Margin="10,0,-28,0" Grid.Column="1" FontFamily="Segoe UI"
                                   FontWeight="SemiLight" FontSize="24.6667" Text="Настройки" HorizontalAlignment="Left" 
                                   Grid.ColumnSpan="2" Width="246" />
                    </Grid>
                </Grid>
                
            </Grid>
        </Border>
    </UserControl>
    

    И вот так в коде в App.xaml.cs вызвать наш UserControl:

    Popup _settingsPopup;
    
    void GroupedItemsPage_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
    {
        var applicationCommands = args.Request.ApplicationCommands;
        var newComand = new SettingsCommand("Settings", "Настройки", (x) =>
        {
            _settingsPopup = new Popup();
            _settingsPopup.IsLightDismissEnabled = true;
            _settingsPopup.Width = 435;
            _settingsPopup.Height = Window.Current.Bounds.Height;
            _settingsPopup.ChildTransitions = new TransitionCollection();
            _settingsPopup.ChildTransitions.Add(new PaneThemeTransition()
            {
                Edge = (SettingsPane.Edge == SettingsEdgeLocation.Right) ?
                                            EdgeTransitionLocation.Right :
                                            EdgeTransitionLocation.Left
            });
            Options mypane = new Options();
            mypane.Width = 435;
            mypane.Height = Window.Current.Bounds.Height;
            _settingsPopup.Child = mypane;
            _settingsPopup.SetValue(Canvas.LeftProperty, SettingsPane.Edge == SettingsEdgeLocation.Right ?
                                                                    (Window.Current.Bounds.Width - 435) : 0);
            _settingsPopup.SetValue(Canvas.TopProperty, 0); _settingsPopup.IsOpen = true;
        });
        applicationCommands.Add(newComand);
    }
    
    private void OnWindowActivated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
    {
        if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
        {
            _settingsPopup.IsOpen = false;
        }
    }
    
    void OnPopupClosed(object sender, object e)
    {
        Window.Current.Activated -= OnWindowActivated;
    }
    • Помечено в качестве ответа ProstoKorol 27 апреля 2013 г. 20:03
    27 апреля 2013 г. 19:41

Все ответы

  • На примере вкладки "Разрешения" - не думаю, что есть вариант изменения ее фона, так как панель системная (может только в настройках темы Windows). ПО поводу собственных панелей - есть очень много примеров в сети, как это сделать.
    27 апреля 2013 г. 19:58
  • Taras Kovalenko спасибо огромное за пример! Попробую...

    В целом разобрался сам, но не успел отписаться. Конечно не без помощи Callisto. 

    27 апреля 2013 г. 20:07