使用触发器为UIElement动态添加发光效果

问题描述:

我对wpf很感兴趣,并且寻找很好的教程来帮助更好地理解触发器,但是没有太多运气。所以我想我会在这里寻求帮助。这里是我试图做的,我有一个ScrollViewer,有一个堆栈面板,在我浏览媒体文件夹后面的代码中,并使用foreach循环将MediaElements添加到堆栈面板,我想要做的是当用户将鼠标悬停在一个这些,我希望它焕发它的下面,我告诉触发器去,所以这里的方式是我迄今为止使用触发器为UIElement动态添加发光效果

的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,即时寻找建议如何解决这个问题或做得更好,或更好的教程...感谢您的帮助

个ps的我使用VS2010 Beta 2的

更新我用尽这也这dosent工作....

<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> 

这是一个容易得多XAML中做,试图操纵这个东西在代码中是一个头痛的问题。

there is some code in this unrelated article关于项目控件生成器,当在列表框中选择项目时将添加发光。 (稍微多于一半的下降)

here is the ms example它使用触发器发光任何有焦点的东西。 (这是一个更容易理解)

+0

我会做直接了XAML,但不幸的是我使用foreach来循环所有的项目。 – nagates 2009-12-17 05:16:29

我只花了几个小时就这一个了,只是为了找出bitmapeffects在已经过时了VS 2010这个帖子上立足这样的回答:msdn forums