WPF WindowChrome с фоном - системные кнопки скрыты
Я создаю собственное окно WPF используя WindowChrome
, Я определил свой собственный стиль, но заголовок представляет проблему. Если я установлю Background
моей главной Grid
в шаблоне к прозрачному, тогда все окно использует системные акцентные цвета и Maximize/Minimize/Close
кнопки видны.
Когда я устанавливаю любой другой фон Maximize/Minimize/Close
кнопки покрываются. Я думал, что просто делаю свои собственные, но эти кнопки по-прежнему кликабельны.
Есть ли способ их показать или полностью отключить?
Я могу установить CaptionHeight
до 0 и создать собственную строку заголовка, но я не хочу переопределять перетаскивание и другие функции по умолчанию.
Мой стиль ниже:
<Window.Style>
<Style TargetType="{x:Type Window}">
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome GlassFrameThickness="-1"
ResizeBorderThickness="4"
CaptionHeight="36"/>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ConfigurationWindow}" >
<Grid>
<Rectangle Fill="Blue" VerticalAlignment="Top" Width="{TemplateBinding Width}"
Height="35" ></Rectangle>
<!-- This is the ContentPresenter that displays the window content. -->
<Border Margin="0,40,0,5" >
<ContentPresenter Content="{TemplateBinding Content}"/>
</Border>
<!--This is the transparent white rectangle that goes behind the window content.-->
<Border Margin="1,40,1,5" BorderBrush="Gray" BorderThickness="0,1,0,1"
Grid.ZIndex="-1">
<Rectangle Fill="White" Opacity="0.5" />
</Border>
<!-- Window Title -->
<TextBlock VerticalAlignment="Top" TextAlignment="Center"
Padding="0,3,0,8"
Text="{Binding RelativeSource=
{RelativeSource TemplatedParent}, Path=Title}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Style>
1 ответ
Как прокомментировал @emoacht, увидев GlassFrameThickness
в ноль удаляет невидимые кнопки закрытия / макс / мин. Вы все еще можете перетащить окно за область заголовка.
настройка GlassFrameThickness
предназначена для того, чтобы сделать все окно прозрачным в Aero способом из Windows 7.
Кроме того, вам не нужно использовать Microsoft.Windows.Shell
Пакет NuGet больше. Класс, который вам нужен, теперь находится в рамках, так как System.Windows.Shell.WindowChrome
(в PresentationFramework.dll
).