精华内容
下载资源
问答
  • wpf多窗口实现的方法
    2022-02-24 11:10:04

    XAML三个顶级元素:
    Window、UserControl(用户控件,布局的时候像窗体那样布局就可以
    了)、Page把窗体以网页形式展现。而一个XAML页面里只能有一个顶级元
    素。而顶级元素里面只能有一个子元素。因此要有布局控件。
    Window窗体属性

    1. 窗口的外观
      WPF中默认窗口框架的外观,主要取决于Icon、Title、WindowStyle、ResizeMode等属
      性。
      Icon 指定窗口的图标;  
      Title 指定窗口的标题;   
      WindowStyle指定窗口样式,有4个取值:     
      None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)
      SingleBorderWindow,单边框【默认】;    
      ThreeDBorderWindow,3D边框;     
      ToolWindow,工具箱窗口
      ResizeMode是指定大小调节样式,有4个取值:     
      NoResize,不可调节,同时没有最大最小按钮;     
      CanMinimize,不可调节。但可以最小化;(此时最大化按钮不可用)
      CanResize,可调节【默认】;    
      CanResizeWithGrip,可根据网格调节;(窗口右下脚显示可调节网格)
    2. 窗口的位置
      WindowStartupLocation指定窗口初始位置,有3个取值:     
      Manual,手工指定位置,表示可以通过设置其Top、Left属性值来决定窗口的初始位
      置;     
      CenterScreen,屏幕中央;    
      CenterOwner,父窗体中央;
      Topmost调节窗口的前后顺序,属性值为true时,窗口位于最前。     
      Topmost值为true的窗口,位于Topmost值为false的窗口之前;     
      Topmost值都为true的窗口,获得焦点的窗口位于前。
    3. 窗口的大小
      Width、Height,分别表示窗口的宽度和高度,称为“尺寸属性”。
      MaxWidth、MinWidth、MaxHeight、MinHeight,分别表示窗口最大宽度、最小宽度、
      最大高度、最小高度。可以通过得到和更改这些属性值,来获取和改变窗口的大小和长
      宽范围。
      ActualWidth、ActualHeight,分别表示窗口的实际宽度和实际高度,称为“实际尺寸
      属性”。
      实际尺寸属性是根据当前窗口大小、最小化时窗口大小和最大化时窗口大小来计算得到
      的,其值是只读的,也就是说,不能通过改变ActualWidth、ActualHeight的值来更改窗
      口大小。
      SizeToContent,表示窗口大小由内容决定,有4个取值:    
      Manual,手工【默认】;     
      Width,窗体宽度由内容决定;     
      Height,窗体高度由内容决定;     
      WidthAndHeight,窗体大小由内容决定;
      如果内容尺寸超过了窗口的最大或最小范围,还是以最大/最小范围为主。如果手工指定
      了窗口的Width、Height 属性,那么SizeToContent将被忽略。
    4. 窗口的可见性和状态
      Visibility,窗口可见性,有4个枚举值:     
      Visible,可见;    
      Hidden,隐藏;    
      Collapsed,折叠。
      虽然窗口类认为Collapsed与Hidden一样,但二者区别在于,Hidden仅仅将元素设为不可
      见,但是元素在画面上依然占有空间;而Collapsed,在不可视的基础上,能将元素在画
      面上的占位符清除,元素彻底不影响画面。
      Show、Hide,显示窗口和隐藏窗口的两个方法。
      如果窗口的ShowInTaskbar属性值为true,Hide不但隐藏窗口本身,同时隐藏其在任务栏
      上的图标。
      WindowState,窗口状态属性,有3个枚举值:     
      Normal,正常;     
      Maximized,最大化;     
      Minimized,最小化;
      了解就好:
      RestoreBounds,获取窗口在最小化或最大化之前的大小和位置,有4个枚举值,Top
      上、Left左、Width宽、Height高。
      该主窗口的Top:75,Left:75,Width:525,Height:350
      只有窗口在Normal状态下移动或调整时,RestoreBounds的值才会改变。于是可以在窗
      口关闭时将RestoreBounds属性值保存到配置文件,下一次启动程序窗口时,读取上次
      保存的窗口大小、位置,来初始化窗口,以此实现保存用户配置等功能。
      MSDN上的例子:http://msdn.microsoft.com/zhcn/library/system.windows.window.restorebounds.aspx 。
      获取窗口在最小化或最大化之前的大小和位置。
      //输出当前窗口的RestoreBounds值
      private void button1_Click(object sender, RoutedEventArgs e)
      {
      MessageBox.Show(this.RestoreBounds.ToString());
      }
      //属性值:Rect。一个 Rect,指定窗口在最小化或最大化之前的大小和位置。
      public System.Windows.Rect RestoreBounds { get; }

    XAML
    下面的示例使用 RestoreBounds 和独立存储来确保窗口的大小和位置与上一次显示窗口
    时的大小和位置相同。
    C#
    <Window x:Class=“WpfApplication1.Window1”

    xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”
    xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
    Title=“WindowRestoreBoundsSnippets”
    Closing=“MainWindow_Closing”>

    using System;
    using System.ComponentModel;
    using System.IO;
    using System.IO.IsolatedStorage;
    using System.Windows;
    namespace WpfApplication1
    {
    ///
    /// Window1.xaml 的交互逻辑
    ///
    public partial class Window1 : Window
    {
    string filename = “settings.txt”;
    public Window1()
    {
    InitializeComponent();
    // 刷新从先前打开的窗口恢复边界
    IsolatedStorageFile storage =
    IsolatedStorageFile.GetUserStoreForAssembly();
    try
    {
    using (IsolatedStorageFileStream stream = new
    IsolatedStorageFileStream(this.filename, FileMode.Open, storage))
    注解:
    还原矩形是窗口在最小化或最大化之前占用的区域。 在应用程序关闭之前,可以使
    用 RestoreBounds 来保存窗口的最后一个大小和位置,并在下次应用程序启动时检索这
    些值,以将窗口还原到用户离开它的方式。
    using (StreamReader reader = new StreamReader(stream))
    {
    // 从文件中读取恢复边界值
    Rect restoreBounds = Rect.Parse(reader.ReadLine());
    this.Left = restoreBounds.Left;
    this.Top = restoreBounds.Top;
    this.Width = restoreBounds.Width;
    this.Height = restoreBounds.Height;
    }
    }
    catch (FileNotFoundException ex)
    {
    // 当文件在独立存储中找不到时,句柄:
    // * 这是第一次应用程序会话
    // * 文件已被删除
    }
    }
    private void MainWindow_Closing(object sender,
    System.ComponentModel.CancelEventArgs e)
    {
    // 保存restore bounds,以便下次打开此窗口时使用
    IsolatedStorageFile storage =
    IsolatedStorageFile.GetUserStoreForAssembly();
    using (IsolatedStorageFileStream stream = new
    IsolatedStorageFileStream(this.filename, FileMode.Create, storage))
    using (StreamWriter writer = new StreamWriter(stream))
    {
    // 写恢复边界值到文件
    writer.WriteLine(this.RestoreBounds.ToString());
    }
    }
    }
    如果在显示窗口之前或在窗口关闭之后 RestoreBounds 查询,则返回 Empty。
    5. 窗口的生命周期
    关于各事件的描述:
    Initialized:当窗口的FrameworkElement底层初始化时触发,即InitializeComponent方
    法调用时触发。  
    LocationChanged:窗口被移动时触发。  
    Activated:窗口被激活时触发。  
    Deactivated:窗口处于非激活时(即其他窗口处于激活时)触发。   
    Loaded:显示窗口之前触发。  
    ContentRendered:当内容显示的时候触发。   
    Closing:尝试关闭窗口时触发,可以将参数CancelEventArgs的Cancel的属性设置为
    true,取消关闭操作。   
    Closed:在窗口关闭后触发该事件,无法取消。
    Unloaded:当关闭窗口并且从可视化树移除后触发。

    更多相关内容
  • 在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值。 在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如何传值...
  • WPF自定义窗口,保留原生窗口的所有功能,如阴影, 模态闪动,窗口外部拖动改变大小,拖动到屏幕边缘行为,最大最小化动画。 使用阿瓦隆dock高仿vs2017+vs2019样式。 自定义简单画布控件,可移动或缩放,类似ps设计...
  • 本文实例讲述了WPF弹出自定义窗口方法。分享给大家供大家参考,具体如下: 测试环境: [1]VS2010SP1 [2]WPF(.NET Framework 4)项目 内容简介 WPF工程如何弹出自定义窗口 第一步:自定义个窗口 为当前项目新添个...
  • WPF窗口内容动态切换。我第一次喜欢上WPF的原因是WPF窗口切换,操作超级简单、超级方便。从此,就成了WPF的铁粉,WPF中的每一项新的特征,都会让你拍案叫绝。这个示例中,在一个窗口中,通过点击按钮,三个窗口内容...
  • 包括了各种情况的控件拖动,在Grid中以及在Canvas或者其他任意布局的控件拖动,以及窗口拖动,同时解决了拖动和点击的冲突问题。原文链接:https://blog.csdn.net/u013113678/article/details/121397550
  • WPF多窗口传值源码

    2016-02-04 20:39:07
    WPF多窗口传值源码,实现窗口操作数据后父窗口获得子窗口操作的数据。
  • C# wpf 无边框窗口实现拖动调整大小

    千次阅读 2021-11-25 21:33:04
    在《C# wpf Grid中实现控件拖动调整大小》中我们实现了Grid中的控件动态调整大小,对于自定义的无边框窗口也可以使用类似的方式实现。虽然能查到的方案有通过Window Api的和通过WindowChrome实现的,一个是对系统有...

    WPF拖动改变大小系列

    第一节 Grid内控件拖动调整大小
    第二节 Canvas内控件拖动调整大小
    第三节 窗口拖动调整大小(本节)
    第四节 附加属性实现拖动调整大小



    前言

    《C# wpf Grid中实现控件拖动调整大小》中我们实现了Grid中的控件动态调整大小,对于自定义的无边框窗口也可以使用类似的方式实现。虽然能查到的方案有通过Window Api的和通过WindowChrome实现的,一个是对系统有依赖还一个是依赖.net版本,这里提供一种相对轻量的实现方法。


    一、如何实现?

    1.继承Adorner

    通过装饰器的方式添加8个方位拖动区域在窗口上,这样既可以不影响控件布局,又可以自由摆放8个拖动控件。通过重写方法,给装饰添加控件。必要的重写的方法如下面示例所示:

    public class WindowResizeAdorner : Adorner
    {
      //获取装饰器的元素个数
      protected override Visual GetVisualChild(int index);
      //指定装饰器子元素个数
      protected override int VisualChildrenCount{get;}
      //布局,添加的子元素需要手动布局。
      protected override Size ArrangeOverride(Size finalSize);      
    }
    

    2.使用Thumb

    因为Thumb实现拖动比较容易,有相关事件获取拖动距离。在装饰器中定义8个Thumb,对应8个方位点。
    示例代码如下:

    //4条边
    Thumb _leftThumb, _topThumb, _rightThumb, _bottomThumb;
    //4个角
    Thumb _lefTopThumb, _rightTopThumb, _rightBottomThumb, _leftbottomThumb;
    

    初始化

     public WindowResizeAdorner(UIElement adornedElement) : base(adornedElement)
     {
         //初始化thumb
         _leftThumb = new Thumb();
         _leftThumb.HorizontalAlignment = HorizontalAlignment.Left;
         _leftThumb.VerticalAlignment = VerticalAlignment.Center;
         _leftThumb.Cursor = Cursors.SizeWE;
         //其他略...
    }
    

    3.实现拖动逻辑

    在Thumb的DragDelta事件可以获取拖动距离,根据八个方位的不同计算并修改控件的大小。

    private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
    //1.右侧点HorizontalChange加宽
    //2.左侧点HorizontalChange减宽,HorizontalChange加左移
    //3.下侧点VerticalChange加高
    //4.上侧点VerticalChange减高,VerticalChange加上移
    }
    

    二、完整代码

    代码如下:

       public class WindowResizeAdorner : Adorner
        {
            //4条边
            Thumb _leftThumb, _topThumb, _rightThumb, _bottomThumb;
            //4个角
            Thumb _lefTopThumb, _rightTopThumb, _rightBottomThumb, _leftbottomThumb;
            //布局容器,如果不使用布局容器,则需要给上述8个控件布局,实现和Grid布局定位是一样的,会比较繁琐且意义不大。
            Grid _grid;
            UIElement _adornedElement;
            Window _window;
            public WindowResizeAdorner(UIElement adornedElement) : base(adornedElement)
            {
                _adornedElement = adornedElement;
                _window = Window.GetWindow(_adornedElement);
                //初始化thumb
                _leftThumb = new Thumb();
                _leftThumb.HorizontalAlignment = HorizontalAlignment.Left;
                _leftThumb.VerticalAlignment = VerticalAlignment.Stretch;
                _leftThumb.Cursor = Cursors.SizeWE;
                _topThumb = new Thumb();
                _topThumb.HorizontalAlignment = HorizontalAlignment.Stretch;
                _topThumb.VerticalAlignment = VerticalAlignment.Top;
                _topThumb.Cursor = Cursors.SizeNS;
                _rightThumb = new Thumb();
                _rightThumb.HorizontalAlignment = HorizontalAlignment.Right;
                _rightThumb.VerticalAlignment = VerticalAlignment.Stretch;
                _rightThumb.Cursor = Cursors.SizeWE;
                _bottomThumb = new Thumb();
                _bottomThumb.HorizontalAlignment = HorizontalAlignment.Stretch;
                _bottomThumb.VerticalAlignment = VerticalAlignment.Bottom;
                _bottomThumb.Cursor = Cursors.SizeNS;
                _lefTopThumb = new Thumb();
                _lefTopThumb.HorizontalAlignment = HorizontalAlignment.Left;
                _lefTopThumb.VerticalAlignment = VerticalAlignment.Top;
                _lefTopThumb.Cursor = Cursors.SizeNWSE;
                _rightTopThumb = new Thumb();
                _rightTopThumb.HorizontalAlignment = HorizontalAlignment.Right;
                _rightTopThumb.VerticalAlignment = VerticalAlignment.Top;
                _rightTopThumb.Cursor = Cursors.SizeNESW;
                _rightBottomThumb = new Thumb();
                _rightBottomThumb.HorizontalAlignment = HorizontalAlignment.Right;
                _rightBottomThumb.VerticalAlignment = VerticalAlignment.Bottom;
                _rightBottomThumb.Cursor = Cursors.SizeNWSE;
                _leftbottomThumb = new Thumb();
                _leftbottomThumb.HorizontalAlignment = HorizontalAlignment.Left;
                _leftbottomThumb.VerticalAlignment = VerticalAlignment.Bottom;
                _leftbottomThumb.Cursor = Cursors.SizeNESW;
                _grid = new Grid();
                _grid.Children.Add(_leftThumb);
                _grid.Children.Add(_topThumb);
                _grid.Children.Add(_rightThumb);
                _grid.Children.Add(_bottomThumb);
                _grid.Children.Add(_lefTopThumb);
                _grid.Children.Add(_rightTopThumb);
                _grid.Children.Add(_rightBottomThumb);
                _grid.Children.Add(_leftbottomThumb);
                AddVisualChild(_grid);
                foreach (Thumb thumb in _grid.Children)
                {
                    int thumnSize = 10;
                    if (thumb.HorizontalAlignment == HorizontalAlignment.Stretch)
                    {
                        thumb.Width = double.NaN;
                        thumb.Margin = new Thickness(thumnSize, 0, thumnSize, 0);
                    }
                    else
                    {
                        thumb.Width = thumnSize;
                    }
                    if (thumb.VerticalAlignment == VerticalAlignment.Stretch)
                    {
                        thumb.Height = double.NaN;
                        thumb.Margin = new Thickness(0, thumnSize, 0, thumnSize);
                    }
                    else
                    {
                        thumb.Height = thumnSize;
                    }
                    thumb.Background = Brushes.Green;
                    thumb.Template = new ControlTemplate(typeof(Thumb))
                    {
                        VisualTree = GetFactory(new SolidColorBrush(Colors.Transparent))
                    };
                    thumb.DragDelta += Thumb_DragDelta;
                }
            }
    
            protected override Visual GetVisualChild(int index)
            {
                return _grid;
            }
            protected override int VisualChildrenCount
            {
                get
                {
                    return 1;
                }
            }
            protected override Size ArrangeOverride(Size finalSize)
            {
                //直接给grid布局,grid内部的thumb会自动布局。
                _grid.Arrange(new Rect(new Point(-(_window.RenderSize.Width - finalSize.Width) / 2, -(_window.RenderSize.Height - finalSize.Height) / 2), _window.RenderSize));
                return finalSize;
            }
            //拖动逻辑
            private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
            {
                var c = _window;
                var thumb = sender as FrameworkElement;
                double left, top, width, height;
                if (thumb.HorizontalAlignment == HorizontalAlignment.Left)
                {
                    left = c.Left + e.HorizontalChange;
                    width = c.Width - e.HorizontalChange;
                }
                else
                {
                    left = c.Left;
                    width = c.Width + e.HorizontalChange;
                }
                if (thumb.HorizontalAlignment != HorizontalAlignment.Stretch)
                {
                    if (width > 63)
                    {               
                        c.Left = left;
                        c.Width = width;              
                    }
                }
                if (thumb.VerticalAlignment == VerticalAlignment.Top)
                {
    
                    top = c.Top + e.VerticalChange;
                    height = c.Height - e.VerticalChange;
                }
                else
                {
                    top = c.Top;
                    height = c.Height + e.VerticalChange;
                }
    
                if (thumb.VerticalAlignment != VerticalAlignment.Stretch)
                {
                    if (height > 63)
                    {
                        c.Top = top;
                        c.Height = height;
                    }
                }
            }
            //thumb的样式
            FrameworkElementFactory GetFactory(Brush back)
            {
                var fef = new FrameworkElementFactory(typeof(Rectangle));
                fef.SetValue(Rectangle.FillProperty, back);
                return fef;
            }
        }
    

    三、使用示例

    示例代码如下:

    <Window x:Class="WpfControlMove.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:WpfControlMove"
            mc:Ignorable="d"
            Title="MainWindow" Height="360" Width="640"    
            Loaded="Window_Loaded"      
            WindowStyle="None"
            ResizeMode="NoResize"
            Background="Transparent"    
            AllowsTransparency="True"
            >
        <Border Margin="10" Background="White">
            <Border.Effect>
                <DropShadowEffect Color="#FFAAAAAA" ShadowDepth="0" BlurRadius="10" Opacity="0.4"/>
            </Border.Effect>
        </Border>
    </Window>
    

    在窗口或控件的Loaded事件中添加装饰器:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        //将装饰器添加到窗口的Content控件上
        var c = this.Content as UIElement;
        var layer = AdornerLayer.GetAdornerLayer(c);
        layer.Add(new WindowResizeAdorner(c));
    }
    

    效果预览:
    在这里插入图片描述


    总结

    以上就是今天要讲的内容,本文讲述了自定义无边框窗口实现拖动改变大小的方法,其有优点是轻量易于实现和使用,但是也有缺点,往左和往上拖动时会出现一定的界面闪烁,但总得来说,这种实现方法还是可以使用的。

    展开全文
  • 主要介绍了WPF实现渐变淡入淡出的登陆窗口效果的方法,详细讲述了该效果的实现原理与功能代码,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 本文将详细介绍关于WPF窗体最大化问题的相关内容,下面话不说了,来一起看看详细的介绍吧 遇到的问题信息 问题:当WindowStyle=None时,窗口最大化,不显示任务栏 —— 即窗体是全屏效果。 解决中遇到的问题列表...
  • 在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值。在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如何传值...

    在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值。

    在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如何传值可以略过这部分)在网络上有很多对于委托的介绍和讲解,经过我的学习和总结加上了一点我自己的理解,我认为委托是一种类似于C语言的指针,但是它指向的是方法而不是变量。如果把委托看作一个变量,那么这个变量里存着的就是你目标方法的地址,调用委托约等于调用你的目标方法。(个人理解欢迎指正交流)

    以下正文:

    实现窗口间的相互传值,先创建两个窗口,先上代码主窗口代码:

    MainWindow.xaml

    MainWindow.xaml.cs

    1 public void GetValue(string value1, TextBox value2) 2   { 3     MainWindowTextBox.Text = value1; 4   } 5  6 private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 7   { 8     Window1 newWindow1 = new Window1(); 9     newWindow1.getTextHandler = GetValue;          //将方法赋给委托对象10     newWindow1.ShowDialog();11 12   }

    效果图如下:

    第二个窗口Window1代码:

    Window1.xaml

    Window1.xaml.cs

    1 public delegate void GetTextHandler(string value1, TextBox value2);  //声明委托2 public GetTextHandler getTextHandler;                                //委托对象3 4 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)5   {6     getTextHandler(Window1TextBox.Text, Window1TextBox);7   }

    效果图:

    实现效果当运行程序后,点击打开新窗口按钮后,会打开Window1窗口,在Window1窗口的Textbox中输入内容,点击传值,你所输入的内容就会传到主窗口,通过委托的事件将主窗口中的Textbox控件的内容更改为你传过去的值。效果如下:

    现在就已经实现了窗口间传值的操作了。接下来我会简单介绍一下以上代码的实现方法和一些自己的理解,如果不感兴趣或者已经会使用委托进行多窗口间的传值了,后面的部分可以略过。

    前台代码在此就先不介绍了哈,在MainWindow.xaml.cs文件中public void GetValue(string value1, TextBox value2)

    此方法即为委托的目标方法,此方法返回值为空,也可以设置其返回值,当使用委托时也会收到目标方法的返回值。再有就是此方法接收两个参数,一个是字符串一个是TextBox,第二个参数倒是没什么实际含义,只是为了说明这里传递的变量可以多个,也可以是其它object类型。

    newWindow1.getTextHandler = GetValue;          //将方法赋给委托对象

    将方法赋给委托对象,可以理解为把他们两个绑定在一起的getTextHandler这个委托对应的目标方法就是GetValue。

    在Windo1.xaml.cs中:public delegate void GetTextHandler(string value1, TextBox value2);  //声明委托public GetTextHandler getTextHandler;                                //委托对象

    delegate是声明委托的关键字,这里的返回值为空,若目标方法是有返回值的,在这里将返回值写成同种类型即可,接收的两个变量类型也要和目标方法一致。

    接下来就是定义委托对象,大写的GetTextHandler是委托,而小写的getTextHandler是对象,在使用该委托时候使用的也是小写的getTextHandler使用方法:getTextHandler(Window1TextBox.Text, Window1TextBox);

    行文至尾,委托的使用还有很多,例如:事件订阅,匿名方法,多播委托等等,本文介绍的则是委托的基本使用方法,其他的用法仍在学习当中,欢迎指正交流。

    原文出处:https://www.cnblogs.com/hellohxs/p/9528505.html

    展开全文
  • Wpf Mvvm模式下窗口ShowDialog的实现
  • 在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform、WPF实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口界面。 我这里说的多窗口是指一个父...
  • WPF开发的视频监控,可实现多视频画面切换功能,代码详细,可以直接在VS2015版上运行。
  • WPF 实现无边框窗口两种方法

    千次阅读 2021-03-31 09:38:10
    WPF 实现无边框窗口两种方法(本文只介绍两种): 方法1:使用网上常用的方法,设置AllowsTransparency="True"和WindowStyle="None",将窗口的背景设为透明Background="Transparent", 实现代码如下: <Window x:Class...

     

    WPF 实现无边框窗口两种方法(本文只介绍两种):

    方法1:使用网上常用的方法,设置AllowsTransparency="True"和WindowStyle="None",将窗口的背景设为透明Background="Transparent",

    实现代码如下:

    <Window x:Class="Window1"
            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"
            mc:Ignorable="d"
          Title="SetPageY" WindowStyle="None" ResizeMode="CanMinimize" AllowsTransparency="True" Background="Transparent">

        <Border    Margin="10"  MouseLeftButtonDown="Window_MouseLeftButtonDown">
            <Border.Effect>
                <DropShadowEffect BlurRadius="10" Color="#FF486DAA" ShadowDepth="11"/>
            </Border.Effect>

    </Border>

    </Window>

     

    因为要显示阴影Border需要设置边距.窗口的拖拽功能也需要手动实现同时后台添加:

               if (e.ButtonState == MouseButtonState.Pressed)
                {
                    this.DragMove();
                }

    此方法因为要用到 AllowsTransparency="True"非系统原生用法,资源利用低,不推荐!

     

    方法:2  应该方法是得用Window自带窗口属性,可以拖拽,支持鼠标双击,无需添加后台代码.同时设置ResizeMode="CanResizeWithGrip",还可以实现鼠标的窗口的大小拖拽.

       <WindowChrome.WindowChrome>
            <WindowChrome CornerRadius="2" GlassFrameThickness="10" />
        </WindowChrome.WindowChrome>

    该方法用的是窗口原生效果,资源利用高效,但阴影的颜色不可整改.如果要更改阴影的颜色需要重写Window的Template.

     

    展开全文
  • 实现类似 C# TabControl 控件的效果,在同一区域实现界面的切换。通过ContentControl , Frame , Page等将生成子界面嵌入到主窗口
  • 代码如下, ``` <Window x:Class="WPF4.MainWindow" ... ... ...希望能够在运行时,在此界面上使用CTRL+左键 复制一个相同的界面窗口,具有相同功能,C#代码要如何写?怎样把此xaml文件全转为C#代码?
  • wpf中利用Interaction.Behaviors实现窗口的贴边隐藏。
  • wpf+cefsharp实现多页签浏览器 能用,代码简单。 不过方法有点low。 在网上找了一个页签加关闭按钮的办法
  • WPF Mvvm中视图切换

    2020-04-25 20:50:09
    看到网上好多都是在WPF下的视图切换,自已就做了一个Mvvm下的,用到了数据绑定、数据模板、命令等。
  • 由于项目需要检测子系统运行情况,如有异常及时发现,所以实现了次消息弹窗的功能,这是开发前做了一个Dome,希望对相关需要的同僚提供思路!
  • 1. 新建一个WPF Application。2. 将Window的WindowStyle属性设置为”None”去掉标题栏,将AllowsTransparency属性设置为”True”允许透明,Topmost属性设置为”True”使提示文字显示在顶层,Background属性设置为”#...
  • 包含了在MVVM模式下的数据绑定、命令和事件、PasswordBox的绑定、RadioButton等一对控件的绑定、关闭窗口和打开新窗口和数据验证等内容。
  • c# wpf 实现窗口任意区域点击拖动

    千次阅读 2021-10-31 22:44:47
    系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动(本章) 第五章 附加属性实现任意拖动 文章目录 系列文章目录 前言 一、简单拖动 二、事件冲突问题 三、解决方法 ...
  • C#WPF 刷新窗口 实例 可运行 http://www.cnblogs.com/leco/archive/2010/11/28/1890046.html WPF实现Timer 事件 在 WPF 中不再有类似 WinForm 中的 Timer 控件,因此,需要使用 DispatcherTimer 类来实现类似 ...
  • WPF使用画刷功能,把窗口显示出来的内容和未显示出来的内容全部打印出来,使用起来直观、方便,供学习者参考使用。
  • 使用WPF的Frame+Page组合个界面,用NavigationService实现界面切换。压缩包中包含一个简单的示例,包括主窗口(包含Frame),选择下一步的Page(Frame的初始窗口)和两个“下一步”的目标Page。
  • 本资源实现了一种wpf在style中自定义标题栏无边框窗口方法。style内部的实现其实没那么简单,尤其是实现按钮逻辑以及拖动逻辑,需要在style中关联cs代码,这就要求我们熟悉绑定技巧、附加属性还有ContentPresenter...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,823
精华内容 5,129
关键字:

wpf多窗口实现的方法