Как выделить / очертить визуальный объект в WPF? - PullRequest
5 голосов
/ 09 октября 2008

Если бы у меня был Canvas с n числом визуальных объектов любой формы или размера, как бы я выделил / обрисовал визуальный объект программным способом?

Есть ли что-то встроенное в WPF, чтобы помочь мне?

Ответы [ 3 ]

5 голосов
/ 10 октября 2008

Прочитав комментарии в другом ответе, в котором вы заявляете, что хотите, чтобы контур соответствовал форме визуального объекта, я могу только предложить вам взглянуть на BitmapEffects. Есть один для эффекта Outer Glow.

Дублирование самих визуальных элементов, вероятно, будет менее эффективным и, вероятно, вызовет большое количество осложнений из-за других аспектов этих элементов, таких как любые привязки.

Редактировать: В .NET 4.0 свойство BitmapEffects и класс BitmapEffect устарели. Вы получите исключение. Вместо этого теперь у вас есть класс System.Windows.Media.Effects.Effect и его производные классы, а также такие свойства, как Visual.VisualEffect.

5 голосов
/ 10 октября 2008

У Джоэла есть отличное предложение по использованию BitmapEffects.

Однако, если вы можете использовать .NET 3.5 с пакетом обновления 1 (SP1), я бы направил вас к визуализированным с помощью графического процессора эффектам . Таким образом, вместо использования UIElement.BitmapEffect вы должны использовать UIElement.Effect. .NET 3.5 SP1 имеет два встроенных графических эффекта: BlurEffect и DropShadowEffect. Вы также можете создавать свои собственные эффекты графического процессора ... и именно здесь вы бы использовали ShaderEffect.

За дополнительной информацией обращайтесь к блогу Грега Шехтера series .

Вот фрагмент кода для эффекта наведения мыши, который я только что реализовал несколько дней назад (на самом деле он выглядит как растровый эффект внешнего свечения из-за 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> 
1 голос
/ 09 октября 2008

Если вы оберните эти визуальные объекты в рамку ... и установите непрозрачность 0 по умолчанию ... тогда вы можете программно изменить непрозрачность до 1, когда вам нужно.

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...