wpf Button 背景放图片去掉鼠标移上去的白色背景

这段代码展示了如何在WPF中自定义Button样式,以确保当鼠标移上按钮时不会出现白色背景。通过设置模板并指定Border的Background和BorderBrush属性,可以消除默认的鼠标悬停效果。
摘要由CSDN通过智能技术生成
 <Style TargetType="{x:Type Button}">
                     <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="0">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF中,可以使用Win32 API来实现鼠标Hook。以下是一个简单的示例,可以Hook鼠标的左键和右键点击事件: 首先,需要引入以下命名空间: ```csharp using System.Runtime.InteropServices; using System.Windows.Input; ``` 然后定义以下结构体和枚举: ```csharp [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; } public enum MouseMessages { WM_LBUTTONDOWN = 0x0201, WM_LBUTTONUP = 0x0202, WM_RBUTTONDOWN = 0x0204, WM_RBUTTONUP = 0x0205 } ``` 接下来,定义以下方法: ```csharp [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetCursorPos(out POINT lpPoint); [DllImport("user32.dll")] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll")] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); ``` 最后,定义以下委托和字段: ```csharp private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam); private const int WH_MOUSE_LL = 14; private const int WM_MOUSEMOVE = 0x0200; private static LowLevelMouseProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; ``` 现在可以实现Hook的回调函数: ```csharp private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && (MouseMessages)wParam == MouseMessages.WM_LBUTTONDOWN) { // 左键点击事件 POINT point; if (GetCursorPos(out point)) { // 获取鼠标位置 var wpfPoint = new Point(point.X, point.Y); var element = Mouse.DirectlyOver as UIElement; if (element != null) { // 触发鼠标左键点击事件 element.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) { RoutedEvent = UIElement.MouseLeftButtonDownEvent, Source = element, OriginalSource = element, ClickCount = 1, Timestamp = 0, MouseButtonState = MouseButtonState.Pressed, StylusDevice = null, GetPosition = p => wpfPoint, }); } } } else if (nCode >= 0 && (MouseMessages)wParam == MouseMessages.WM_RBUTTONDOWN) { // 右键点击事件 POINT point; if (GetCursorPos(out point)) { // 获取鼠标位置 var wpfPoint = new Point(point.X, point.Y); var element = Mouse.DirectlyOver as UIElement; if (element != null) { // 触发鼠标右键点击事件 element.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Right) { RoutedEvent = UIElement.MouseRightButtonDownEvent, Source = element, OriginalSource = element, ClickCount = 1, Timestamp = 0, MouseButtonState = MouseButtonState.Pressed, StylusDevice = null, GetPosition = p => wpfPoint, }); } } } return CallNextHookEx(_hookID, nCode, wParam, lParam); } ``` 最后,在需要Hook鼠标事件的地方调用以下代码即可: ```csharp _hookID = SetWindowsHookEx(WH_MOUSE_LL, _proc, IntPtr.Zero, 0); ``` 同时,在程序退出时,需要取消Hook: ```csharp UnhookWindowsHookEx(_hookID); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值