2013-03-18 43 views
1

目前有如下的設定:已計算設置器值 - WPF

<Trigger Property="IsMouseOver" Value="True"> 
    <Setter TargetName="rectName" Property="Stroke" Value="Red"/>            
    <Setter TargetName="rectName" Property="StrokeThickness" Value="2"/>      
</Trigger> 

即觸發改變矩形的,以紅色的鼠標懸停在中風和厚度和2。 但是,這隻有當矩形的筆畫是黑色(幾個矩形有透明筆畫​​)時纔會發生。

有什麼辦法可以將這個條件放在Setter上嗎?我正在尋求一種不太乾擾的方式來完成這一點。任何線索?

有一個結構類似如下:

<Setter TargetName="rectName" Property="Stroke" Value="If Black Then Black Else Red"/>            

回答

0

你可以做到這一點使用MultiTrigger(以下未測試的代碼,但應儘量接近)

<Style.Triggers> 
    <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Property="IsMouseOver" Value="True" /> 
      <Condition Property="Stroke" Value="Black" /> 
     </MultiTrigger.Conditions> 
     <Setter TargetName="rectName" Property="Stroke" Value="Red" /> 
     <Setter TargetName="rectName" Property="StrokeThickness" Value="2" /> 
    </MultiTrigger> 
</Style.Triggers> 
+1

它給出了一個錯誤'「中風」屬性無法從屬性觸發器設置,並在同一time.' – 2013-03-18 02:32:07

+0

你是對的,比較遺憾的是出現在觸發的條件。我認爲你將不得不使用valueconverter =( – failedprogramming 2013-03-18 03:38:14

1

下面這將工作,但是請注意,這段代碼會拋出一個堆棧溢出異常,因爲當鼠標懸停在紅色的黑色紅色黑色之上時,顏色會發生變化:/我只是建議一些其他方式來跟蹤矩形狀態,也許是雜物BLE在保持狀態的跟蹤和視圖模型,並在代碼替換:

<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Stroke}" Value="Black" /> 

的東西,如:

<Condition Binding="{Path=RectState}" Value="True" /> 

否則這將會崩潰:)(對不起匆忙寫這篇)

<Rectangle Height="100" HorizontalAlignment="Left" Margin="182,152,0,0" Name="rectangle1" VerticalAlignment="Top" Width="200" > 
     <Rectangle.Style> 
      <Style TargetType="Rectangle"> 
       <Setter Property="Fill" Value="Transparent" /> 
       <Setter Property="Stroke" Value="Black" /> 
       <Style.Triggers>      
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" /> 
          <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Stroke}" Value="Black" /> 
         </MultiDataTrigger.Conditions> 
         <MultiDataTrigger.Setters> 
          <Setter Property="StrokeThickness" Value="2" /> 
          <Setter Property="Stroke" Value="Red" /> 
         </MultiDataTrigger.Setters> 
        </MultiDataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Rectangle.Style> 
    </Rectangle>