Динамически добавленные эффекты свечения в UIElement с использованием триггеров - PullRequest
0 голосов
/ 17 декабря 2009

Я новичок в wpf и ищу хорошие учебники, которые помогут лучше понять триггеры, но мне не повезло. Поэтому я подумал, что буду искать здесь помощь. Вот что я пытаюсь сделать, у меня есть ScrollViewer с панелью стека, в коде позади я просматриваю папку мультимедиа и добавляю MediaElements в панель стека с помощью цикла foreach, что я хочу сделать, это когда пользователь наводит курсор на один из них, я хочу, чтобы он светился под ним, мне сказали, что триггеры - это путь, так что вот что у меня есть

Еогеасп

                MediaElement newVideoPreview = new MediaElement(); 
                newVideoPreview.Width = 125;
                newVideoPreview.Stretch = Stretch.Uniform; 
                newVideoPreview.Margin = new Thickness(5, 5, 5, 5); 
                newVideoPreview.Volume = 0;

                Trigger trig = new Trigger();
                trig.Property = IsMouseOverProperty;
                trig.Value = true;
                Style style = new Style();
                style.TargetType = newVideoPreview.GetType();
                style.Triggers.Add(trig);
                Setter set  = new Setter();

                OuterGlowBitmapEffect glow = new OuterGlowBitmapEffect();
                glow.GlowColor = Color.FromRgb(0, 0, 205);
                glow.GlowSize = 10;
                set.Value = glow; // <- Crash house
                set.Property = EffectProperty;
                style.Setters.Add(set);
                newVideoPreview.Style = style;

Как вы можете видеть, я получаю недопустимое исключение аргумента, когда пытаюсь установить setter.value, я ищу предложения о том, как это исправить или сделать лучше, или лучше учебники ... Спасибо за любую помощь

p.s Я использую VS2010 бета 2

Обновление Ive пробовал это тоже, что до сих пор работает ....

<UserControl x:Class="WiiDSUKiosk.WiiFriendlyScrollViewer"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Grid.Resources>
        <Style TargetType="{x:Type UIElement}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="BitmapEffect">
                        <Setter.Value>
                            <OuterGlowBitmapEffect GlowColor="Navy" GlowSize="10"/>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>
    <ScrollViewer Name="wiiFriendlyScrollViewer" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden"
                  MouseMove="wiiFriendlyScrollViewer_MouseMove" >

        <StackPanel Name="stackPanelContent" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden">
        </StackPanel>
    </ScrollViewer>
</Grid>

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Я тоже потратил на это несколько часов, просто чтобы узнать, что растровые эффекты устарели в сравнении с 2010 годом. Основываясь на этом ответе на этот пост: Форумы MSDN

2 голосов
/ 17 декабря 2009

это намного проще сделать в xaml, попытка манипулировать этим материалом в коде - головная боль.

есть некоторый код в этой не связанной статье о генераторах элементов управления, которые добавят свечение, когда элемент выбран в списке. (чуть более половины пути вниз)

вот пример MS , который использует триггеры, чтобы светить все, что имеет фокус. (это намного легче понять)

...