麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

WPF實現窗體中的懸浮按鈕

2019-10-29 19:41:22
字體:
來源:轉載
供稿:網友

WPF實現窗體中的懸浮按鈕,按鈕可拖動,吸附停靠在窗體邊緣。

控件XAML代碼:

<Button x:Class="SunCreate.Common.Controls.FloatButton"       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        mc:Ignorable="d"        d:DesignHeight="300" d:DesignWidth="300"       Width="50" Height="50" Margin="0"        HorizontalAlignment="Left" VerticalAlignment="Top"        x:Name="btn"       Loaded="btn_Loaded" Click="btn_Click" >  <Button.Template>    <ControlTemplate>      <Grid MouseLeftButtonDown="Border_MouseLeftButtonDown">        <Border CornerRadius="25" Background="#022938" Opacity="0.2" >        </Border>        <Border CornerRadius="20" Width="40" Height="40" Background="#022938" Opacity="0.3" >        </Border>        <Border CornerRadius="14" Width="28" Height="28" Background="#b06919" Opacity="0.8" >        </Border>      </Grid>    </ControlTemplate>  </Button.Template></Button>

控件cs代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace SunCreate.Common.Controls{  /// <summary>  /// 懸浮按鈕  /// </summary>  public partial class FloatButton : Button  {    public event EventHandler ClickEvent;    private bool _move = false;    double _distance = 200;    double _distanceNew = 5;    private Point _lastPos;    private Point _newPos;    private Point _oldPos;    public FloatButton()    {      InitializeComponent();    }    private void btn_Loaded(object sender, RoutedEventArgs e)    {      if (this.Parent != null && this.Parent is FrameworkElement)      {        FrameworkElement parent = this.Parent as FrameworkElement;        double left = parent.ActualWidth - this.ActualWidth - this._distanceNew;        double top = parent.ActualHeight - this.ActualHeight - this._distanceNew;        this.Margin = new Thickness(left, top, 0, 0);      }    }    private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)    {      if (this.Parent != null && this.Parent is FrameworkElement)      {        FrameworkElement parent = this.Parent as FrameworkElement;        _move = true;        _lastPos = e.GetPosition(parent);        _oldPos = _lastPos;        parent.PreviewMouseMove += (s, ee) =>        {          if (_move)          {            Point pos = ee.GetPosition(parent);            double left = this.Margin.Left + pos.X - this._lastPos.X;            double top = this.Margin.Top + pos.Y - this._lastPos.Y;            this.Margin = new Thickness(left, top, 0, 0);            _lastPos = e.GetPosition(parent);          }        };        parent.PreviewMouseUp += (s, ee) =>        {          if (_move)          {            _move = false;            Point pos = ee.GetPosition(parent);            _newPos = pos;            double left = this.Margin.Left + pos.X - this._lastPos.X;            double top = this.Margin.Top + pos.Y - this._lastPos.Y;            double right = parent.ActualWidth - left - this.ActualWidth;            double bottom = parent.ActualHeight - top - this.ActualHeight;            if (left < _distance && top < _distance) //左上            {              left = this._distanceNew;              top = this._distanceNew;            }            else if (left < _distance && bottom < _distance) //左下            {              left = this._distanceNew;              top = parent.ActualHeight - this.ActualHeight - this._distanceNew;            }            else if (right < _distance && top < _distance) //右上            {              left = parent.ActualWidth - this.ActualWidth - this._distanceNew;              top = this._distanceNew;            }            else if (right < _distance && bottom < _distance) //右下            {              left = parent.ActualWidth - this.ActualWidth - this._distanceNew;              top = parent.ActualHeight - this.ActualHeight - this._distanceNew;            }            else if (left < _distance && top > _distance && bottom > _distance) //左            {              left = this._distanceNew;              top = this.Margin.Top;            }            else if (right < _distance && top > _distance && bottom > _distance) //右            {              left = parent.ActualWidth - this.ActualWidth - this._distanceNew;              top = this.Margin.Top;            }            else if (top < _distance && left > _distance && right > _distance) //上            {              left = this.Margin.Left;              top = this._distanceNew;            }            else if (bottom < _distance && left > _distance && right > _distance) //下            {              left = this.Margin.Left;              top = parent.ActualHeight - this.ActualHeight - this._distanceNew;            }            ThicknessAnimation marginAnimation = new ThicknessAnimation();            marginAnimation.From = this.Margin;            marginAnimation.To = new Thickness(left, top, 0, 0);            marginAnimation.Duration = TimeSpan.FromMilliseconds(200);            Storyboard story = new Storyboard();            story.FillBehavior = FillBehavior.Stop;            story.Children.Add(marginAnimation);            Storyboard.SetTargetName(marginAnimation, "btn");            Storyboard.SetTargetProperty(marginAnimation, new PropertyPath("(0)", Border.MarginProperty));            story.Begin(this);            this.Margin = new Thickness(left, top, 0, 0);          }        };      }    }    private void btn_Click(object sender, RoutedEventArgs e)    {      if (_newPos.Equals(_oldPos))      {        if (ClickEvent != null)        {          ClickEvent(sender, e);        }      }    }  }}

如何使用:

<Window    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:ui="clr-namespace:SunCreate.Common.Controls;assembly=SunCreate.Common.Controls"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="SunCreate.Common.Controls.Demo.MainWindow"    Height="700" Width="1200"     Background="#ff10498c"     WindowStartupLocation="CenterScreen">  <Grid>    <ui:FloatButton x:Name="floatBtn" ></ui:FloatButton>  </Grid></Window>

效果圖:

WPF,窗體,懸浮按鈕

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: www.99热视频 | 亚洲欧美在线看 | 国产精品免费在线 | 天堂成人国产精品一区 | 国产精品一区二区日韩 | 国产在线1区 | 亚洲国产色婷婷 | 国产精品久久久久av | 国产成人精品免费视频大全最热 | 精品国产一区二区三区四 | 毛片天天看 | 女18一级大黄毛片免费女人 | 欧美成人性生活片 | 成人毛片100免费观看 | 亚洲欧美在线视频免费 | 黄色欧美精品 | 一级电影免费看 | 一级黄色a视频 | 中文字幕激情 | 在线成人免费网站 | 麻豆视频观看 | 香蕉久久久 | 黄色成人在线 | 神马久久精品综合 | 91精品久久久久久久久久久 | 天堂精品 | 国产精品久久久久一区二区 | 中文字幕一区久久 | 免费a级片视频 | 午夜精品成人 | 国产精品一区久久久久 | 久久久久久久久久久久久久av | 一级视频在线播放 | 黄网站免费在线看 | 天天舔夜夜操 | 日韩精品久久久久久久九岛 | 他也色在线视频 | 黄色毛片免费看 | 免费a级黄色毛片 | 国产一国产精品一级毛片 | av免播放 |