gpt4 book ai didi

C# WPF带边框的透明窗口

转载 作者:太空狗 更新时间:2023-10-29 17:52:06 30 4
gpt4 key购买 nike

我想制作一个简单的应用程序,它是透明的,但保留“正常”边框、关闭按钮、最小化和最大化按钮。

我知道如何使用标准使窗口透明

<Window
WindowStyle="None"
AllowsTransparency="True"
Background="Transparent">
</Window>

但这会删除边框和右上角的按钮。我读了这篇文章,

Transparent window with a border

哪种解决方案,但实际上,我只是希望能够保留标准边框,如果我不使窗口透明则该边框会出现。这意味着我可以移动窗口、调整大小、关闭等等...这可能吗?

最佳答案

我拼凑了一个快速的 TransparencyConverterbased on this tutorial on Microsoft.com您可以用于此目的:

using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;

namespace WpfApplication2
{
class TransparencyConverter
{
private readonly Window _window;

public TransparencyConverter(Window window)
{
_window = window;
}

public void MakeTransparent()
{
var mainWindowPtr = new WindowInteropHelper(_window).Handle;
var mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
if (mainWindowSrc != null)
if (mainWindowSrc.CompositionTarget != null)
mainWindowSrc.CompositionTarget.BackgroundColor = System.Windows.Media.Color.FromArgb(0, 0, 0, 0);

var margins = new Margins
{
cxLeftWidth = 0,
cxRightWidth = Convert.ToInt32(_window.Width) * Convert.ToInt32(_window.Width),
cyTopHeight = 0,
cyBottomHeight = Convert.ToInt32(_window.Height) * Convert.ToInt32(_window.Height)
};

if (mainWindowSrc != null) DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
}

[StructLayout(LayoutKind.Sequential)]
public struct Margins
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}

[DllImport("DwmApi.dll")]
public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref Margins pMarInset);
}
}

一旦你有了这个,将透明背景属性添加到你的 XAML 并订阅 Window_Loaded 事件并调用 MakeTransparent 方法:

<Window etc etc Background="Transparent" Loaded="Window_Loaded">

private void Window_Loaded(object sender, RoutedEventArgs e)
{
var transparencyConverter = new TransparencyConverter(this);
transparencyConverter.MakeTransparent();
}

截图如下:

Screenshot

关于C# WPF带边框的透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927699/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com