簡體   English   中英

WPF app的所有windows自定義標題欄

[英]Custom Title bar in all windows of WPF app

我的應用程序的所有 windows 都有自定義標題欄。 我想創建一個模板,我可以在不同的 windows 或消息框上多次使用我在想什么是實現這一目標的最佳實踐。

目前我有一個標題欄,但它在每個 window 中都是硬編碼的。

這是 windows 之一的示例

<Window x:Class="MyApp.Configuration.Windows.NotMainWindow"
        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"
        Title="Some text" 
        Height="113.868" Width="405.84" 
        Background="#FFE5E5E5"
        WindowStyle="None"
        >
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="34" />
    </WindowChrome.WindowChrome>

    <Window.Resources>
        <ResourceDictionary Source="pack://application:,,,/somefolder.somefolder;component/Resources/TitleBarIconsStyle.xaml" />
    </Window.Resources>
    <Border x:Name="MainWindowBorder"  BorderThickness="0" >
        <Grid x:Name="parentContainer">

            <Grid.RowDefinitions>
                <RowDefinition Height ="Auto"/>
                <RowDefinition Height ="*"/>
            </Grid.RowDefinitions>

            <!--Window chrome-->
            <Grid Grid.Row="0" Height="30" Background="#585856">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
                    <!--App icon-->
                    <Image Source="/Resources/icon.png" Width="18" Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" />
                    <TextBlock FontFamily="Arial" Margin="4 3 0 0" Text="Some text"/>
                </StackPanel>

                <!--Caption buttons-->
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" >
                    <Button Style="{StaticResource MinimizeButtonStyle}" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Minimize"
                             Click="CommandBinding_Executed_Minimize"/>
                    <Button x:Name="RestoreButton" Visibility="Collapsed" Style="{StaticResource RestoreButtonStyle}" 
                            Click="CommandBinding_Executed_Restore" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Restore"/>
                    <Button x:Name="MaximizeButton" Visibility="Visible" Style="{StaticResource MaximizeButtonStyle}" 
                            Click="CommandBinding_Executed_Maximize" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Maximize" />
                    <Button x:Name="CloseButton" Style="{StaticResource CloseButtonStyle}" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Close"
                            Click="CommandBinding_Executed_Close"/>
                </StackPanel>
            </Grid>
            <Grid Grid.Row="1">
                <TextBox x:Name="Input"/>
                <Button x:Name="OkButton" 
                Content="Ok"/>

            </Grid>
        </Grid>
    </Border>
</Window>

基於此MSDN文檔,您無法在 WPF App 中自定義(如更改 colors 並添加您的圖標)windows 標題欄。

解決方案是創建自定義標題欄樣式並在<Window/>標記中設置WindowStyle="None"

我的 WPF 應用程序中有一個自定義標題欄:

<Grid FlowDirection="RightToLeft">
        <Grid.RowDefinitions>
            <RowDefinition Height="25*"/>
        </Grid.RowDefinitions>
        
        <StackPanel Margin="0 0 5 0" Orientation="Horizontal" Background="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" Grid.Row="0" Grid.Column="6" Grid.ColumnSpan="2" FlowDirection="LeftToRight">
            <Button x:Name="btnCloseApp" IsEnabled="True" Margin="0 0 4 0" ToolTip="Exit" Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Height="25" Width="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="DodgerBlue" Click="btnCloseApp_Click">
                <materialDesign:PackIcon Kind="Shutdown" Height="20" Width="20"/>
            </Button>
            <Button x:Name="btnMinimizeApp" IsEnabled="True" ToolTip="Minimize" Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Height="25" Width="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="DodgerBlue" Click="btnMiniApp_Click">
                <materialDesign:PackIcon Kind="WindowMinimize" Height="20" Width="20"/>
            </Button>
        </StackPanel>
</Grid>

在圖片中:

在此處輸入圖像描述

再次不要忘記設置WindowStyle="None"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM