2011-05-26 63 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,使用樣式來代替。