2016-07-15 87 views
1

我想將擴展器背景顏色更改爲鼠標懸停時更輕的變體。所以我想我使用觸發器和轉換器將背景顏色轉換爲鼠標上的較亮變體。我開始簡單,只實現觸發器。這工作:更改鼠標懸停時的擴展器背景

<StackPanel> 
    <StackPanel.Resources> 
     <Style TargetType="{x:Type Expander}"> 
      <Style.Triggers> 
       <Trigger Property="Control.IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Resources> 

    <Expander Header="Header"> 
     <StackPanel> 
      <TextBox Background="Transparent">Content</TextBox> 
     </StackPanel> 
    </Expander> 

</StackPanel> 

所以我可以實現我想要的。但我希望能夠設置顏色上像這樣的擴展:

<Expander Header="Header" Background="Yellow"> 

那一刻我補充一點的顏色切換停止工作,且擴張始終是黃色的。爲什麼會發生這種情況,我該如何實現目標?

編輯:在我的最終應用程序我將有一個itemscontrol與多個擴展器的背景顏色是數據綁定到我的視圖模型,所以我認爲我不能設置顏色的風格。

<ItemsControl ItemsSource="{Binding TestStepDescriptions}"> 
    <ItemsControl.Resources> 
     <DataTemplate DataType="{x:Type localVMsTestEngines:AutomaticTestStepDescription}"> 
      <Expander Background="{Binding StepStatus, Converter={StaticResource StepStatusToColorConverter}}"> 

問候, 傑夫

回答

1

如果使用觸發器不能設置顏色的擴展直接。

相反,你必須做這樣的:

<ItemsControl ItemsSource="{Binding TestStepDescriptions}"> 
    <ItemsControl.Resources> 
     <DataTemplate DataType="{x:Type localVMsTestEngines:AutomaticTestStepDescription}"> 
      <Expander > 
<Expander.Style> 
    <Style TargetType="{x:Type Expander}"> 
    <Setter Property="Background" Value="{Binding StepStatus, Converter={StaticResource StepStatusToColorConverter}}"/> 
       <Style.Triggers> 
        <Trigger Property="Control.IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
</Expander.Style> 
</Expander> 

使用 <Expander Header="Header">

+0

是的,我知道我能做到這樣,那是我的第一個例子,但是這是行不通的在我的應用程序。我對這個問題進行了編輯以澄清。對不起,缺乏清晰度。 –

+0

當然。你也可以這樣做:'' – lokusking

+0

可能是的,但它是WhereEverYouWantToBind部分似乎不清楚。我無法從資源中的樣式綁定到視圖模型,或者我可以嗎?我在問題中將xaml添加到了我的編輯中。 –