没有合适的资源?快使用搜索试试~ 我知道了~
首页WPF实现窗体中的悬浮按钮
资源详情
资源评论
资源推荐

WPF实现窗体中的悬浮按钮实现窗体中的悬浮按钮
主要为大家详细介绍了WPF实现窗体中的悬浮按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
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);
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1