如何在WPF中突出显示/勾勒出Visual对象?

Dyl*_*lan 5 wpf

如果我有一个包含任意形状或大小的n个Visual对象的Canvas,我将如何以编程方式突出显示/概述Visual对象?

WPF中有内置的东西可以帮助我吗?

Joe*_*ant 5

阅读了另一个答案中的评论 - 你声明你希望大纲符合视觉的形状 - 我只能建议你看一下BitmapEffects.有一个外发光效果.

复制视觉本身可能效率较低,并且可能由于这些项目的其他方面(例如任何绑定)而产生大量复杂性.

编辑:在.NET 4.0中,BitmapEffects属性和BitmapEffect类已过时.你会得到一个异常抛出.相反,您现在拥有System.Windows.Media.Effects.Effect类及其派生类,以及诸如的属性Visual.VisualEffect.


cpl*_*tts 5

Joel对使用BitmapEffects提出了很好的建议.

但是,如果您可以使用.NET 3.5 SP1,我会引导您转向GPU渲染效果.因此,您将使用UIElement.Effect而不是使用UIElement.BitmapEffect..NET 3.5 SP1内置了两个GPU效果:BlurEffect和DropShadowEffect.您还可以创建自己的GPU效果......这是您使用ShaderEffect的地方.

查看Greg Schechter的博客文章系列了解更多信息.

这是我几天前刚刚实现的鼠标悬停效果的一段代码(由于ShadowDepth为0,它实际上显示有点像外部发光位图效果,但不完全如此):

<Path
    x:Name="mouseOverEffect"
    Width="80"
    Height="43.916"
    Stretch="None"
    Fill="#FFFFFFFF"
    Opacity="0"
>
    <Path.Data>
        <PathGeometry FillRule="Nonzero">
            <PathFigure IsClosed="True" StartPoint="39.9592899612151,25.9913931634531">
                <LineSegment Point="80.0000001464848,43.9159987905149"/>
                <LineSegment Point="39.9513899394755,4.97379893856246E-14"/>
                <LineSegment Point="1.77635636294422E-15,43.9159987905149"/>
                <LineSegment Point="39.9592899612151,25.9913931634531"/>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
    <Path.Effect>
        <DropShadowEffect
            Color="#FFFFFFFF"
            BlurRadius="10"
            ShadowDepth="0"
        />
    </Path.Effect>
</Path> 
Run Code Online (Sandbox Code Playgroud)