• WPF自定义标题栏——窗口移动和按钮状态转换[转]


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

      标题栏的移动:

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

    <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();
    }

    本文来自eilotyan的博客,原文地址:http://blog.csdn.net/eilotyan/archive/2011/06/08/6532917.aspx

  • 相关阅读:
    嵌入式linux问题杂锦
    QT creator 调试问题
    torcs代码
    ubuntu12.04安装KDevelop
    ubuntu12.04LTS安装以及卸载 QT4.8.6和QT creator2.5.2
    用vs2010编译vs2013建的工程
    mysql+matlab配置
    流形学习笔记
    可用的rtmp互联网地址
    信用卡术语
  • 原文地址:https://www.cnblogs.com/mane/p/2083836.html
Copyright © 2020-2023  润新知