zoukankan      html  css  js  c++  java
  • WPF WindowChrome 自定义窗口

    1.wpf自定义窗口:

    WindowChrome类描述:https://msdn.microsoft.com/zh-cn/library/system.windows.shell.windowchrome.aspx

    示例样式效果:

    1.设置GlassFrameThickness=0 隐藏默认标题栏

      

    2.最大化最小化不会盖住任务栏

    不能设置WindowStyle="None",否则靠WindowState属性最大化时会出现窗体显示在任务栏背后,导致部分窗体被遮盖

    3关于屏幕溢出问题

    没google到很好的办法,目前是添加margin解决,就是最大化时添加8px margin,这个值是google到的帖子中代码中出现频率较高的值,也有人推荐这个值,但是无法兼容屏幕分辨率,可以大体根据屏幕分辨率设置不同的值.

    然后,我尝试过将CaptionHeight=0,然后不依赖WindowState属性而是手动去设置Location, width ,height,

    过程中遇到一个问题:CaptionHeight设置为0,但是Caption区域任然存在,但是和设置了CaptionHeight时有区别,这个区域(长、宽)不随窗体最大化而变化,也就是最大化了Caption的宽度不变,导致左边区域可以拖动窗体,右边区域无法拖动。

    所以解决最大化、最小化、最大化时拖动标题栏变成Normal状态、拉动窗体四边框调整窗体大小、解决屏幕溢出、解决任务栏覆盖的问题最好的办法就是不用WindowChrome,但是又会遇到 AllowsTransparency="True"的问题

     <Border>
            <Border.Style>
                <Style TargetType="{x:Type Border}">
                    <Style.Triggers>
                        <!-- fix window screen overflow,set margin 8px -->
                        <DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
                                     Value="Maximized">
                            <Setter Property="Margin" Value="8px"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
                                     Value="Normal">
                            <Setter Property="Margin" Value="0"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
    <Border>    window content ...... </Border>
     </Border>
    <Window x:Class="WindowChromeTest.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:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
            xmlns:local="clr-namespace:WindowChromeTest"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <Style TargetType="local:MainWindow">
                <Setter Property="shell:WindowChrome.WindowChrome">
                    <Setter.Value>
                        <shell:WindowChrome
                            CaptionHeight="50"
                            GlassFrameThickness="0"
                            CornerRadius="0"
                            ResizeBorderThickness="2"
                            ></shell:WindowChrome>
                    </Setter.Value>
                </Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type local:MainWindow}">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="50"></RowDefinition>
                                    <RowDefinition Height="*"></RowDefinition>
                                </Grid.RowDefinitions>
                                <Border Grid.Row="0" Background="Orange">
                                    <StackPanel Orientation="Horizontal">
                                        <Button shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="Test Button" Click="Button_Click"></Button>
                                    </StackPanel>
                                </Border>
                                <Border Grid.Row="1" Background="White">
                                    <ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
                                </Border>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <TextBlock Text="asdasdf"></TextBlock>
    </Window>
    

      

  • 相关阅读:
    鲍尔默称微软将投入数十亿美元打造数据中心业务(转)
    程序流程的辅助控制
    获取程序所在目录
    越界赋值
    长字串与宽字串
    长字串与短字串
    指针的运算
    Windows API 的数据类型与 Delphi 数据类型对照表
    给动态数组添加一个元素
    Delphi 与 C/C++ 数据类型对照表
  • 原文地址:https://www.cnblogs.com/maoyuanwai/p/7089889.html
Copyright © 2011-2022 走看看