WPF阴影和捕获屏幕

本文关键字:屏幕 阴影 WPF | 更新日期: 2023-09-27 18:08:43

我创建了一个阴影窗口,代码如下

<Grid Background="Red" Margin="0">
    <Grid.Effect>
        <DropShadowEffect BlurRadius="10" ShadowDepth="1" Direction="270" Color="Red"/>
    </Grid.Effect>
    <Grid Margin="1" Background="White">
    </Grid>
</Grid>

结果是成功的,但当我尝试用alt+打印scr捕获windows屏幕截图时空格是这样的

第一http://puu.sh/9rK9b/4dbd9a3b46.png

我想捕获屏幕内的网格区域,除了阴影区域,像这样

第二http://puu.sh/9rKcj/098796a6c7.png

WPF阴影和捕获屏幕

您需要手动复制alt+print scr的功能以获得所需的行为。

首先,您需要钩入消息循环并沿着这些行拦截按:

ComponentDispatcher.ThreadFilterMessage += new ThreadMessageEventHandler(OnThreadMessage);
static void OnThreadMessage(ref MSG msg, ref bool handled)
{
    if (!handled)
    {
        if (msg.message == WmHotKey)
        {
            // intercept alt+print screen here, do custom action
        }
    }
}

然后你需要从ui元素中生成你想要的图像,并沿着以下几行设置它到剪贴板(uiElement将是你的Grid):

var bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(uiElement);
encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (var stream = new MemoryStream)
{
    encoder.Save(stream);
    var img = Image.FromStream(stream);
    Clipboard.SetImage(img);
}