现在位置首页 / 项目实战 /正文

wpf小知识--窗口相关拖拽缩放

作者: IT小兵 | 2014年6月20日| 热度:℃ | 评论: |参与:

整理一下最近用的wpf小知识。

1、WindowStyle=none,无边框窗口拖拽:

本方法最完美最简洁.

为自绘的标题栏添加MouseLeftButtonDown事件,并在事件中写入this.DragMove();

代码:

   <Border x:Name="logo1" HorizontalAlignment="Left" Height="80" Margin="0,0,-640,0" MouseLeftButtonDown="logo1_MouseLeftButtonDown"
                VerticalAlignment="Top" Width="1272">
            <Border.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FF0D61A1" Offset="0"/>
                    <GradientStop Color="#FF02A0EA" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
            <Label x:Name="logo" Content="选择与任务" HorizontalAlignment="Left" Height="60" Margin="20,10,0,0" VerticalAlignment="Top" Width="250" Style="{DynamicResource logoLable}">
                <Label.Background>
                    <ImageBrush ImageSource="Themes/ZCThemes/skin/icon/icon_case.png" Stretch="Uniform"/>
                </Label.Background>
            </Label>
        </Border>
   private void logo1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }

2、禁止缩放(放大缩小)窗口

只需要设置

  ResizeMode="NoResize"

3、Wpf窗口自适应: 利用WPF中的ViewBox容器空间。ViewBox是一个容器空间,它会自动缩放容器中的子空间以填满自身,同时它只能有一个子控件。不过,我们可以把Canvas控件作为ViewBox控件的子控件。然后在Canvas控件中布局其他的控件。

代码:

<Window x:Class="Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="WPFTest"

    mc:Ignorable="d"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

    SizeToContent="Manual" Width="400" Height="300">
    <DockPanel  Name="DockPanel1"  LastChildFill="True">
      <Menu Height="23" Name="Menu1"  DockPanel.Dock="Top">
        <MenuItem Header="Menu1">
          <MenuItem Header="H1" />
          <MenuItem Header="H2" />
        </MenuItem>
          <MenuItem Header="Menu2">
          <MenuItem Header="L1" />
          <MenuItem Header="L2" />
          <Separator />
          <MenuItem Header="L4" />
        </MenuItem>
      </Menu>
      <StatusBar Height="23" Name="StatusBar1"  DockPanel.Dock="Bottom">
        <StatusBarItem Content="S1" Name="S1"/>
        <StatusBarItem Content="S2" Name="S2"/>
        <StatusBarItem Content="S3" Name="S3"/>
      </StatusBar>
      <Viewbox  Name="Viewbox1" Stretch="Fill">
        <Canvas Height="200" Name="Canvas1" Width="300" Background="#FF8EDE75">
          <Button Canvas.Left="43" Canvas.Top="40" Content="Button" Height="37" Name="Button1" Width="87" />
        </Canvas>
      </Viewbox>
    </DockPanel>
  </Window>

说明:

最外面的是Window容器,设置了标题(WPFTest)和大小(400×300),它也只能有一个子控件。

  Window的子控件是DockPanel容器,是自动停靠容器控件。设置LastChildFill="True",表示最后一个子控件自动填充剩余的空间。没有设置大小,默认大小是Window的客户区大小。

  DockPanel控件有三个子控件

  •     Menu控件:菜单控件,自动停靠在容器的顶端

  •     StatusBar控件:状态栏控件,自动停靠在容器的底部

  •     ViewBox控件:容器控件,自动填充DockPanel剩余的控件。没有设置大小,为填充的大小。设置填充的模式为Fill,表示子控件填充自身的容器的大小

  •       在ViewBox中放置了一个Canvas控件,设置了大小(注:一定要设置大小,否则默认时会产生各种不可思议的效果),设置了背景色

  •       在Canvas中放置了一个Button控件。只是示例,Canvas中还能放置其他的控件


4、去掉自带的最大化 最小化。自定义最大化 最小化。

  • 屏蔽掉WPF窗口自带的最大、最小、关闭等设置Window的属性  windowStyle=“none”

自定义自己的按钮:

 

 <Button Content="最小化" HorizontalAlignment="Left"   VerticalAlignment="Top" 
                        Click="WindowsMin_Click"
                        Style="{DynamicResource Buttonlist}" >
                    <Button.Background>
                        <ImageBrush ImageSource="Themes/ZCThemes/skin/btn/icon_min.png" Stretch="None"/>
                    </Button.Background>
                </Button>
                <Button Content="退出" HorizontalAlignment="Left"  Click="WindwowsClose_Click"
                    VerticalAlignment="Top"  Style="{DynamicResource Buttonlist}" Margin="10,0,0,0">
                <Button.Background>
                    <ImageBrush ImageSource="Themes/ZCThemes/skin/btn/icon_quit.png" Stretch="None"/>
                </Button.Background>
            </Button>

后台事件代码:

        private void WindowsMin_Click(object sender, RoutedEventArgs e)
        {
            this.WindowState = System.Windows.WindowState.Minimized;
        }
          private void WindwowsClose_Click(object sender, RoutedEventArgs e)
        {          
            //this.Close();
            if (MessageBox.Show("确定退出助手吗?",
    "确认退出", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                // Close the window
                Application.Current.Shutdown();
            }
            else
            {
                // Do not close the window
            } 
      
        }

注意:WPF的close是关闭不了进程的。需要用  Application.Current.Shutdown();

点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:[email protected]

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:[email protected]

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询