2012-02-09 50 views
1

我的模板定義ListBoxItem的樣式(這裏是它的一部分):IsMouseOver與IsSelected重疊的ListViewItem的

<ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="Azure"/> 
         <Setter TargetName="Border" Property="Height" Value="Auto"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="Border" Property="Background" Value="Cornsilk"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 

偏偏,當我選擇了一些項目,它仍然爲IsMouseOver定義它。我必須將鼠標移出框才能成爲Azure。可能缺少某些東西?也許有一種方法,使一些風格壓倒一切的一個(IsSelected)? 謝謝。

+0

這是糟糕的設計。您不應該通過非獨佔屬性上的觸發器來設置背景。如果IsSelected和IsMouseOver都是true,那麼應該設置哪個背景?它含糊不清。 – Clemens 2012-02-09 15:18:58

+0

要設置一個更加特權),但我不知道是否WPF支持這種想法。但是,你將如何執行這個descibed的場景呢? – Nickolodeon 2012-02-09 15:22:34

+0

可能MultiDatatrigger是一個我想要的,不是嗎?所以我可以指定屬性和它們的值的組合? – Nickolodeon 2012-02-09 15:24:55

回答

1

顛倒你的觸發器的順序。當兩個條件相同時,只有最後一個適用。

<ControlTemplate.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter TargetName="Border" Property="Background" Value="Cornsilk"/> 
    </Trigger> 
    <Trigger Property="IsSelected" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="Azure"/> 
     <Setter TargetName="Border" Property="Height" Value="Auto"/> 
    </Trigger> 
</ControlTemplate.Triggers> 
0

不應將背景屬性設置爲非排他屬性IsSelectedIsMouseOver的觸發器,從而創建不明確的值。

相反,你可以把一個玉米穗黃顏色的矩形與Opacity="0"以上的模板中的所有其他控件,並在IsMouseOver觸發設置矩形的Opacity到例如0.5。因此,你可以在同一時間顯現兩種狀態,因爲你仍然可以看到通過半透明IsMouseOver矩形的IsSelected色的背景。

1

其實我用MultiTriggers實現這一點,INSTEAD OF觸發器。

<MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True" /> 
          <Condition Property="IsMouseOver" Value="True" /> 

         </MultiTrigger.Conditions> 
         <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedListboxItem}"/> 
         <Setter TargetName="Border" Property="Height" Value="Auto"/> 
        </MultiTrigger> 

        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="False" /> 
          <Condition Property="IsMouseOver" Value="True" /> 

         </MultiTrigger.Conditions> 
         <Setter TargetName="Border" Property="Background" Value="{StaticResource HoveredListboxItem}"/> 
        </MultiTrigger>