2012-12-18 28 views
0

我的WPF應用程序在警車中運行,並具有夜間模式,可將應用程序切換爲更柔和的顏色,因此屏幕不會影響警官的夜視。我幾乎可以改變所有需要改變的顏色。問題是Tab控件和ComboBox控件的鼠標懸停上的背景顏色。這些變成了一種明亮的藍白色。需要幫助定位鼠標在控制模板中的顏色變化

對於我的生活,我無法找到顏色變化發生的地方。這些控件的控件模板在IsMouseOver屬性上不包含Trigger,我可以找到它。

有誰知道我在哪裏可以找到這個設置?或者我應該在我自己的基於Aero模板的自定義模板中添加IsMouseOver觸發器?

回答

1

我使用Visual Studio 2012和Windows 8,所以我的風格可能與您的風格略有不同。

<Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}"> 
     <Setter Property="FocusVisualStyle"> 
      <Setter.Value> 
       <Style> 
        <Setter Property="Control.Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Rectangle Margin="2" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Foreground" Value="Black"/> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
        <GradientStop Color="#FFF0F0F0" Offset="0"/> 
        <GradientStop Color="#FFE5E5E5" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="BorderBrush" Value="#FFACACAC"/> 
     <Setter Property="Margin" Value="0"/> 
     <Setter Property="Padding" Value="6,2"/> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid x:Name="templateRoot" SnapsToDevicePixels="True"> 
         <Border x:Name="mainBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" Background="{TemplateBinding Background}" Margin="0"> 
          <Border x:Name="innerBorder" BorderBrush="#FFACACAC" BorderThickness="1,1,1,0" Background="White" Margin="-1" Opacity="0"/> 
         </Border> 
         <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" Focusable="False" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" TargetName="mainBorder"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
             <GradientStop Color="#FFECF4FC" Offset="0"/> 
             <GradientStop Color="#FFDCECFC" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FF7EB4EA"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,0,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,0,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" TargetName="mainBorder"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
             <GradientStop Color="#FFECF4FC" Offset="0"/> 
             <GradientStop Color="#FFDCECFC" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FF7EB4EA"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,0,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,0,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" TargetName="mainBorder"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
             <GradientStop Color="#FFECF4FC" Offset="0"/> 
             <GradientStop Color="#FFDCECFC" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FF7EB4EA"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="0,1,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="0,1,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" TargetName="mainBorder"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
             <GradientStop Color="#FFECF4FC" Offset="0"/> 
             <GradientStop Color="#FFDCECFC" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FF7EB4EA"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Opacity" TargetName="contentPresenter" Value="0.56"/> 
          <Setter Property="Background" TargetName="mainBorder" Value="#FFF0F0F0"/> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FFD9D9D9"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,0,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,0,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Opacity" TargetName="contentPresenter" Value="0.56"/> 
          <Setter Property="Background" TargetName="mainBorder" Value="#FFF0F0F0"/> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FFD9D9D9"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,0,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,0,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Opacity" TargetName="contentPresenter" Value="0.56"/> 
          <Setter Property="Background" TargetName="mainBorder" Value="#FFF0F0F0"/> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FFD9D9D9"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="0,1,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="0,1,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Opacity" TargetName="contentPresenter" Value="0.56"/> 
          <Setter Property="Background" TargetName="mainBorder" Value="#FFF0F0F0"/> 
          <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FFD9D9D9"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,0,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,0,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Panel.ZIndex" Value="1"/> 
          <Setter Property="Margin" Value="-2,-2,0,-2"/> 
          <Setter Property="Opacity" TargetName="innerBorder" Value="1"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,0,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,0,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,0,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,0,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Panel.ZIndex" Value="1"/> 
          <Setter Property="Margin" Value="-2,0,-2,-2"/> 
          <Setter Property="Opacity" TargetName="innerBorder" Value="1"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,0,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,0,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="0,1,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="0,1,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Panel.ZIndex" Value="1"/> 
          <Setter Property="Margin" Value="0,-2,-2,-2"/> 
          <Setter Property="Opacity" TargetName="innerBorder" Value="1"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="0,1,1,1"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="0,1,1,1"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> 
           <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Panel.ZIndex" Value="1"/> 
          <Setter Property="Margin" Value="-2,-2,-2,0"/> 
          <Setter Property="Opacity" TargetName="innerBorder" Value="1"/> 
          <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/> 
          <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/> 
         </MultiDataTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

那麼當你將鼠標懸停在它上面時會導致藍色的顏色? 這個小multitrigger就在這裏:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
     <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Background" TargetName="mainBorder"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
       <GradientStop Color="#FFECF4FC" Offset="0"/> 
       <GradientStop Color="#FFDCECFC" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderBrush" TargetName="mainBorder" Value="#FF7EB4EA"/> 
    <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/> 
    <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/> 
</MultiDataTrigger> 

你可以從條件看,它觸發時,鼠標懸停和標籤欄在頂部。還有一些其他觸發器看起來差不多,但是在標籤位於右側,左側和底部時。不過,這是你的顏色變化。

編輯: 這裏是ComboBox中multitrigger:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> 
     <Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ComboBox}}}" Value="false"/> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Background" TargetName="templateRoot"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
       <GradientStop Color="#FFECF4FC" Offset="0"/> 
       <GradientStop Color="#FFDCECFC" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FF7EB4EA"/> 
</MultiDataTrigger> 
+0

你在哪裏得到的是從XAML ? –

+0

在VS2012(或混合)中,如果您右鍵單擊組件,您可以選擇編輯模板 - >編輯副本。 – AkselK

+0

謝謝,我會尋找'TabItem'類的樣式,看看我能否找到這個多觸發器。不過,我對ComboBox類也有同樣的問題。任何想法的觸發器是哪一個? –

0

這可能是在systemColors中,您可以覆蓋這些,我曾與按鈕類似的問題而回(無法找到該項目:()

要在此改變系統burshes你可以像下面添加行到<Window.Resources><ControlTemplate.Resources>

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.HotTrackBrushKey}" Color="Transparent" /> 

完整的sustem顏色覆蓋的名單可以在這裏找到: http://blogs.msdn.com/b/wpf/archive/2010/11/30/systemcolors-reference.aspx

就像我說我不知道​​這是否會幫助,但值得一試:)