zoukankan      html  css  js  c++  java
  • WPF自定义标题栏——窗口移动和按钮状态转换

    其实这一部分的资料网上很多,也看了很多的例子,不过大部分都不是自己想要的结果,所以就综合网上的资料整理了一下,放在这里吧,虽然现在放弃WPF了,不过以后还是想接着学一下,先放着吧就。

    标题栏的移动:

    其实这部分还是很简单的,只需加一个<Grid>(其他布局也可以),然后响应鼠标移动事件就好了。事件响应时的代码也非常简单,判断现在鼠标是否在按下状态,如果是,调用窗口移动命令。

    <Grid Name="titleBar" VerticalAlignment="Top" Height="40" Background="#0F4378" MouseMove="TitleBar_MouseMove">
    </Grid>

    鼠标移动时间响应:

    public void TitleBar_MouseMove(object sender, MouseEventArgs e)
    {
        if(e.LeftButton == MouseButtonState.Pressed)
            this.DragMove();
    }

    窗口按钮状态转换:

    这里指的是普通,鼠标浮上,鼠标按下三种状态在同一张图片上,通过图片的偏移来实现转换。

    以最小化按钮为例:

    <Button Name="minBtn" Width="34" FocusVisualStyle="{x:Null}" Click="MinBtn_Click">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background">
                    <Setter.Value>
                        <DrawingBrush Stretch="Fill" TileMode="Tile" Viewport="0,0,3,1" Viewbox="0,0,1,1">
                            <DrawingBrush.Drawing>
                                <ImageDrawing ImageSource="res/btn_min.png" Rect="0,0,1,1"/>
                            </DrawingBrush.Drawing>
                        </DrawingBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Grid Background="{TemplateBinding Background}">
                                <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background">
                            <Setter.Value>
                                <DrawingBrush Stretch="Fill" TileMode="Tile" Viewport="2,0,3,1" Viewbox="0,0,1,1">
                                    <DrawingBrush.Drawing>
                                        <ImageDrawing ImageSource="res/btn_min.png" Rect="0,0,1,1"/>
                                    </DrawingBrush.Drawing>
                                </DrawingBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background">
                            <Setter.Value>
                                <DrawingBrush Stretch="Fill" TileMode="Tile" Viewport="1,0,3,1" Viewbox="0,0,1,1">
                                    <DrawingBrush.Drawing>
                                        <ImageDrawing ImageSource="res/btn_min.png" Rect="0,0,1,1"/>
                                    </DrawingBrush.Drawing>
                                </DrawingBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

    同样实现窗口的最小化和关闭也比较容易:

    private void MinBtn_Click(object sender, RoutedEventArgs e)
    {
        this.WindowState = WindowState.Minimized;
    }
    private void CloseBtn_Click(object sender, RoutedEventArgs e)
    {
        mainWindow.Close();
    }

    原文地址:http://blog.csdn.net/eilotyan/article/details/6532917

  • 相关阅读:
    Cogs 465. 挤牛奶
    洛谷P1083 借教室
    Cogs 1264. [NOIP2012] 开车旅行(70分 暴力)
    2017-10-19 NOIP模拟赛
    Codevs 2144 砝码称重 2
    洛谷P1450 [HAOI2008]硬币购物
    洛谷P2534 [AHOI2012]铁盘整理
    洛谷P1731 生日蛋糕
    2017-10-18 NOIP模拟赛
    洛谷P1074 靶形数独
  • 原文地址:https://www.cnblogs.com/duqingsong/p/3091107.html
Copyright © 2011-2022 走看看