2011-06-07 65 views
5

我在生成包含来自C#代码的触发器的WPF样式时遇到了一些麻烦。 这里是我想要通过C#生成的WPF代码。生成包含来自C#触发器的WPF样式代码

<Style.Triggers> 
    <Trigger Property="IsMouseOver" Value="true"> 
     <Setter Property="BitmapEffect"> 
      <Setter.Value> 
       <OuterGlowBitmapEffect GlowColor="Gold" GlowSize="10" /> 
      </Setter.Value> 
     </Setter> 
    </Trigger> 
</Style.Triggers> 

我alredy试图产生这样的:

Style style = new Style(); 
Trigger trigger = new Trigger(); 
Setter setter = new Setter(); 

style.Triggers.Add(trigger); 
trigger.Property = (DependencyProperty.Register("IsMouseOver", Type.GetType("IsMouseOver"), Type.GetType("Canvas"))); //Line not tested 
//trigger.Setters.Add(new Setter(new BitmapEffect()); //Line not working 

,但我无法弄清楚如何使用trigger.Setters与BitmapEffect

感谢你提前!

回答

7

直接的翻译是:

OuterGlowBitmapEffect effect = new OuterGlowBitmapEffect(); 
effect.GlowColor = Colors.Gold; 
effect.GlowSize = 10; 

Setter setter = new Setter(); 
setter.Property = UIElement.BitmapEffectProperty; 
setter.Value = effect; 

Trigger trigger = new Trigger(); 
trigger.Property = UIElement.IsMouseOverProperty; 
trigger.Value = true; 
trigger.Setters.Add(setter); 

Style style = new Style(); 
style.Triggers.Add(trigger); 

这可以清理到:

var effect = new OuterGlowBitmapEffect() { 
    GlowColor = Colors.Gold, 
    GlowSize = 10, 
}; 

var setter = new Setter() { 
    Property = UIElement.BitmapEffectProperty, 
    Value = effect, 
}; 

var trigger = new Trigger() { 
    Property = UIElement.IsMouseOverProperty, 
    Value = true, 
    Setters = { setter }, 
}; 

var style = new Style() { 
    Triggers = { trigger }, 
}; 

但是,这是根据你的编码风格。