• WPF之Window无边框拖动、特殊形状、Grid拖拽


    WPF之Window无边框拖动、特殊形状、Grid拖拽

    Grid

    在这里插入图片描述
    要点:

    • IsSharedSizeScope属性
    <Window x:Class="Grid.MainWindow"
            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:Grid"
            mc:Ignorable="d"
            Title="MainWindow" Height="250" Width="300">
    
        <Grid Grid.IsSharedSizeScope="True">
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition/>
            Grid.RowDefinitions>
    
            
            <Grid Grid.Row="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50" SharedSizeGroup="A" />
                    <ColumnDefinition Width="100" SharedSizeGroup="B"/>
                    <ColumnDefinition/>
                Grid.ColumnDefinitions>
                <Border Background="Orange"/>
                <Border Background="Green" Grid.Column="1" Margin="3,7,10,15"/>
                
                <GridSplitter HorizontalAlignment="Right" Height="10" Width="5" Background="Gray"/>
                <GridSplitter HorizontalAlignment="Right" Height="10" Width="5" Background="Gray" Grid.Column="1"/>
            Grid>
    
            
            <Grid Grid.Row="1" Height="60" VerticalAlignment="Top" Margin="0,10,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="A"/>
                    <ColumnDefinition  SharedSizeGroup="B"/>
                    <ColumnDefinition/>
                Grid.ColumnDefinitions>
                <Border Background="Orange">
                Border>
                <Border Grid.Column="1" BorderBrush="Red" BorderThickness="1">
                    <TextBlock/>
                Border>
            Grid>
        Grid>
    Window>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    Window

    无边框窗口

    如果Window的WindowStyle=“None”,则Window会没有边框,此时无法拖动窗口,并且也没有最大最小和关闭按键。同时设置AllowsTransparency="True"和Background=“Transparent”。

    此时可以使用WindowChrome来解决

    <WindowChrome.WindowChrome>
       <WindowChrome CaptionHeight="50" UseAeroCaptionButtons="False"/>
    WindowChrome.WindowChrome>
    
    • 1
    • 2
    • 3
    • CaptionHeight代表标题高度(也就是在哪个高度范围内可以拖动)
    • UseAeroCaptionButtons表示是否禁用自带的最小最大化按钮(一般禁用,配合自定义按钮)

    注意

    如果某个控件位于CaptionHeight设定的高度内,是不能被命中的,解决办法是在该控件内添加属性WindowChrome.IsHitTestVisibleInChrome="True"

    特殊形状窗口

    <Window.Clip>
        <PathGeometry Figures="M0,0 200,0A75 75 0 0 1 200 150L0,150z"/>
    Window.Clip>
    
    • 1
    • 2
    • 3

    表示将图形之外的内容都裁剪掉

    • 必须配合AllowsTransparency="True" WindowStyle="None"使用
    • 不能和WindowChrome一起使用,因为给裁剪了
    • 若要实现拖拽效果,必须在某个控件下实现MouseLeftButtonDown事件
    private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        this.DragMove();
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 相关阅读:
    11个精美网页——Web前端开发技术课程大作业,期末考试,Dreamweaver简单网页制作
    dubbo原理
    leaflet教程021:加载Stadia地图(多种形式)
    VUE(混入mixin、计算属性computed、监听watch)
    【Linux】Ubuntu20.04配置静态固定IP地址
    从 wepy 到 uniapp 变形记
    DJYOS驱动开发系列一:基于DJYOS的UART驱动编写指导手册
    【数据结构与算法】快速排序算法、归并排序算法的介绍和程序实现
    [设计模式] 抽象工厂模式简易案例
    还不懂Java线程池实现原理,看这一篇文章就够了
  • 原文地址:https://blog.csdn.net/weixin_44064908/article/details/128166405