zoukankan      html  css  js  c++  java
  • [WPF 学习] 9.自定义一个Window的样子

    基本思路是把原来的WindowStyle设置为None,然后自己弄一个标题栏

    一、xmal

    <Window x:Class="YKCore.WindowSetup" Name="WinMain"
            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"
            xmlns:local="clr-namespace:YKCore"
            mc:Ignorable="d"
            WindowState="Maximized"
            WindowStyle="None" SizeChanged="WinMain_SizeChanged"
            Height="450" Width="800" BorderThickness="0" Background="{DynamicResource BackgroundColor}"
        xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2">
       
            <!-- 最大化按钮形状 -->
            <PathGeometry x:Key="pathMaximize">
                <PathGeometry.Figures>
                    M1,1  L1 ,11 L11,11 L11,1 z M0,0 L12,0 L12,12 L0,12 z
                </PathGeometry.Figures>
            </PathGeometry>
            <!-- 还原按钮形状 -->
            <PathGeometry x:Key="pathRestore">
                <PathGeometry.Figures>
                    M1,3 L1,11 L9,11 L9,3 z M3,1 L3,2 L10,2 L10,9 L11,9 L11,1 z M2 ,0 L12,0 L12,10 L10,10 L10,12 L0,12 L0,2 L2 ,2 z
                </PathGeometry.Figures>
            </PathGeometry>
    
        </Window.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="50"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
            </Grid.RowDefinitions>
            <Border BorderBrush="{DynamicResource ForeColor}" BorderThickness="2,2,2,0" Padding="10,0">
                <Grid>
    <!--自己画个图标,也就是一个圆角矩形里面写了个字母M-->
                    <Rectangle Width="30" Height="28" Stroke="Yellow" StrokeThickness="1" HorizontalAlignment="Left" RadiusX="5" RadiusY="5" />
                    <TextBlock Text="M" Foreground="Yellow" Margin="10,0,0,0">
                        <TextBlock.RenderTransform>
                            <SkewTransform AngleX="-15"/>
                        </TextBlock.RenderTransform>
                    </TextBlock>
    
    
                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right">
    
                        <Button x:Name="BtnMin"  Width="28" Height="28"   Click="BtnMin_Click" >
                            <Path  Data="M0,5 L12,5 L12,6 L0,6 z" Fill="{DynamicResource ForeColor}" Width="12" Height="12"/>
                        </Button>
                        <Button x:Name="BtnMax"  Width="28" Height="28"  Click="BtnMax_Click">
                            <Path x:Name="PMax" Fill="{DynamicResource ForeColor}" Width="12" Height="12"/>
                        </Button>
                        <Button x:Name="BtnClose"  Width="28" Height="28"  Click="BtnClose_Click" >
                            <Button.Content>
                                <Path Data="M1,0 L6,5 L11,0 L12,1 L7,6 L12,11 L11,12 L6,7 L1,12 L0,11 L5,6 L0,1 z" Fill="{DynamicResource ForeColor}" Width="12" Height="12"/>
                            </Button.Content>
                        </Button>
                    </StackPanel>
                </Grid>
            </Border>
            <Border Grid.Row="1" BorderBrush="{DynamicResource ForeColor}" BorderThickness="2" Padding="10">
    <!--原来的Window的Content-->
            </Border>
        </Grid>
    </Window>
    
    

    二、后台代码(几个事件)

            private void BtnClose_Click(object sender, RoutedEventArgs e)
            {
                Application.Current.Shutdown();
            }
    
            private void BtnMax_Click(object sender, RoutedEventArgs e)
            {
                this.WindowState = this.WindowState != WindowState.Maximized ? WindowState.Maximized : WindowState.Normal;
            }
    
            private void BtnMin_Click(object sender, RoutedEventArgs e)
            {
                this.WindowState = WindowState.Minimized;
            }
    
            private void WinMain_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                PMax.Data = this.WindowState == WindowState.Maximized ? Resources["pathRestore"] as Geometry : Resources["pathMaximize"] as Geometry;
            }
    
    
  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/catzhou/p/12551196.html
Copyright © 2011-2022 走看看