2011-05-26 53 views
3

我想使用样式外的触发器。 编辑:哎呀,对不起,它实际上是在MainWindow中的一种样式中,但我希望触发器适用于Ellipse而不是MainWindow。XAML:为什么这个触发器不起作用?

<Ellipse Fill="White" StrokeThickness="1" Stroke="Black"> 
    <Ellipse.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Fill" Value="Yellow"/> 
     </Trigger> 
    </Ellipse.Triggers> 
</Ellipse> 

如何解决编译器错误,这是“无法找到静态成员‘FillProperty’的类型‘主窗口’”?

回答

4

你必须把这种风格

<Ellipse StrokeThickness="1" Width="20" Height="20" Stroke="black"> 
    <Ellipse.Style> 
    <Style TargetType="{x:Type Ellipse}"> 
    <Setter Property="Fill" Value="Red"/> 

    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true"> 
     <Setter Property="Fill" Value="green"/> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 
</Ellipse.Style> 
+1

这工作。有谁知道为什么触发器不能在Style之外工作? (Ellipse有一个Triggers集合是无法使用的误导,如果它只支持EventTriggers,它应该被命名为EventTriggers,或者错误消息应该这样说)。并且,请注意,此代码不会分配填充为Ellipse的一个属性,而是使用Setter标签来做同样的事情。如果Ellipse具有Fill属性,则触发器停止工作!有人知道为什么 – Qwertie 2011-05-26 17:30:13

+0

现在我有另一个问题。如果在椭圆的顶部有其他东西,那么当鼠标位于内部物体的顶部时,椭圆的颜色会改变。任何想法如何保持颜色的变化? – Qwertie 2011-05-26 17:35:52

+2

@Qwertie,如果您将Fill属性设置为一行(直接在Ellipse上),则不会看到触发器的值,而这是设计。填充(以及UI元素的大多数其他XAML属性)是一个DependencyProperty,当有多个事物尝试设置属性(样式设置器,触发器设置器等)时,会有一个非常特定的顺序来确定“实际”值。有关更多信息,请参阅** Dependency Property Value Precedence **部分下的http://msdn.microsoft.com/en-us/library/ms752914.aspx。 – Adrian 2011-05-26 19:01:46

0

您的窗口没有像Ellipse那样名为“Fill”的属性。也许你的意思是“背景”。

+0

椭圆没有背景。我想设置填充。 – Qwertie 2011-05-26 16:55:54

+0

我的观点是风格被应用于窗口,而不是椭圆。 – 2011-05-26 18:00:44

2

在直接触发你需要限定的类型名称,像这样:

<Ellipse Width="100" Height="100"> 
    <Ellipse.Triggers> 
     <Trigger Property="Ellipse.IsMouseOver" Value="True"> 
      <Setter Property="Ellipse.Fill" Value="Yellow" /> 
     </Trigger> 
    </Ellipse.Triggers> 
</Ellipse> 

这虽然不会直接因为工作的触发器只允许EventTriggers,使用样式来代替。