Изменение цвета фона строки заголовка WPF

У меня есть приложение WPF для Windows. Мне нужно изменить цвет фона строки заголовка. Как я могу это сделать?


person Emad Gabriel    schedule 15.08.2009    source источник
comment
По теме: stackoverflow.com/questions/9978444/.   -  person DuckMaestro    schedule 20.01.2015
comment
Возможный дубликат Как можно ли стилизовать рамку и строку заголовка окна в WPF?   -  person StayOnTarget    schedule 24.07.2019


Ответы (3)


В WPF строка заголовка является частью неклиентской области, которую нельзя изменить с помощью класса окна WPF. Вам нужно управлять дескрипторами Win32 (если я правильно помню).
Эта статья может быть вам полезна: Пользовательское окно Chrome

person Marcel B    schedule 16.08.2009
comment
Ссылка на Custom Window Chrome в WPF теперь мертва - person Lyle S.; 13.04.2019
comment
@LyleS. ссылка работает нормально, может быть, на мгновение она не работает. - person Sebastian; 22.10.2019
comment
Ссылка не работает (снова), может относиться к этому ссылка - person Yeshurun Kubi; 12.08.2020

Вот пример того, как этого добиться:

    <Grid DockPanel.Dock="Right"
      HorizontalAlignment="Right">

        <StackPanel Orientation="Horizontal"
                HorizontalAlignment="Right"
                VerticalAlignment="Center">

            <Button x:Name="MinimizeButton"
                KeyboardNavigation.IsTabStop="False"
                Click="MinimizeWindow"
                Style="{StaticResource MinimizeButton}" 
                Template="{StaticResource MinimizeButtonControlTemplate}" />

            <Button x:Name="MaximizeButton"
                KeyboardNavigation.IsTabStop="False"
                Click="MaximizeClick"
                Style="{DynamicResource MaximizeButton}" 
                Template="{DynamicResource MaximizeButtonControlTemplate}" />

            <Button x:Name="CloseButton"
                KeyboardNavigation.IsTabStop="False"
                Command="{Binding ApplicationCommands.Close}"
                Style="{DynamicResource CloseButton}" 
                Template="{DynamicResource CloseButtonControlTemplate}"/>

        </StackPanel>
    </Grid>
</DockPanel>

Handle Click Events in the code-behind.

Для MouseDown -

App.Current.MainWindow.DragMove();

Для кнопки "Свернуть" -

App.Current.MainWindow.WindowState = WindowState.Minimized;

Для DoubleClick и MaximizeClick

if (App.Current.MainWindow.WindowState == WindowState.Maximized)
{
    App.Current.MainWindow.WindowState = WindowState.Normal;
}
else if (App.Current.MainWindow.WindowState == WindowState.Normal)
{
    App.Current.MainWindow.WindowState = WindowState.Maximized;
}
person Sushant Khurana    schedule 16.02.2011
comment
ApplicationCommands.Close у меня не работал. Я использовал Application.Current.MainWindow.Close (); в команде. Также нет DoubleClick for Grid, я использовал MouseLeftButtonDown и использовал это. если (e.ClickCount == 2) {Максимизировать (); } else {Application.Current.MainWindow.DragMove (); } - person Egemen Çiftci; 13.10.2017
comment
Какое отношение имеет этот код к запрашиваемому цвету строки заголовка? Пожалуйста, объясни! - person user74696c; 04.12.2019

Вы также можете создать окно без полей, а сами сделать границы и строку заголовка.

person Thomas Levesque    schedule 16.08.2009
comment
Но тогда вам нужно самостоятельно создать все функции панели задач (например, перемещение, увеличение / восстановление размера двойным щелчком, закрытие при двойном щелчке по значку, ...). - person Marcel B; 16.08.2009
comment
да ... но в этом нет ничего страшного, например, метод DragMove упрощает управление перемещением, а остальное проще простого;) - person Thomas Levesque; 16.08.2009
comment
я знаю ... но создание собственной панели заголовков кажется мне грязным трюком (помимо создания того же внешнего вида и ощущений - довольно сложная задача, imho) - person Marcel B; 16.08.2009