WPF阴影和捕获屏幕

时间:2014-06-13 14:35:14

标签: c# wpf xaml shadow

我用这段代码制作了一个阴影窗口

<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 + print scr捕获windows屏幕截图时 这样的空白边缘。

first http://puu.sh/9rK9b/4dbd9a3b46.png

我想在网格区域内捕捉除了阴影区域之外的屏幕。

second http://puu.sh/9rKcj/098796a6c7.png

1 个答案:

答案 0 :(得分:1)

您需要手动复制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将是你的网格):

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);
}