2015-06-09 109 views
2

我試圖創建應用程序組合框主題。但是,我需要組合框邊框在選項卡切換時改變顏色。我已經嘗試了所有的東西,但我似乎無法做到。WPF - 如何在突出顯示組合框時集中

任何幫助,將不勝感激。

<SolidColorBrush x:Key="NouvemWhiteBrush">White</SolidColorBrush> 
<SolidColorBrush x:Key="NouvemSecondaryMainBrush">#FFF58E0F</SolidColorBrush> 

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
       <Grid> 
        <Border x:Name="Border" Background="Transparent"> 
         <TextBlock FontSize="12"><InlineUIContainer> 
           <ContentPresenter/> 
          </InlineUIContainer></TextBlock> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsHighlighted" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="Foreground" Value="White"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 


<SolidColorBrush x:Key="ButtonNormalBorder" Color="Black"/> 
<Geometry x:Key="DownArrowGeometry">M 0 0 L 3.5 4 L 7 0 Z</Geometry> 

<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="IsTabStop" Value="false"/> 
    <Setter Property="Focusable" Value="false"/> 
    <Setter Property="ClickMode" Value="Press"/> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="BorderBrush" Value="DarkGray"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 

       <Themes1:ButtonChrome x:Name="Chrome" 
        BorderBrush="DarkGray" 
        Background="{StaticResource NouvemWhiteBrush}" 
        RenderPressed="{TemplateBinding IsPressed}" 
        SnapsToDevicePixels="true"> 

        <Grid HorizontalAlignment="Right" 
         Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"> 
         <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/> 
        </Grid> 
       </Themes1:ButtonChrome> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="true"> 
         <Setter Property="BorderBrush" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="BorderThickness" Value="10"/> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 
        <Trigger Property="IsChecked" Value="False"> 
         <Setter Property="BorderBrush" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="BorderThickness" Value="10"/> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF"/> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="true"> 
         <Setter Property="BorderBrush" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="BorderThickness" Value="10"/> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="True"> 
         <Setter Property="BorderBrush" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="BorderThickness" Value="10"/> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 




<Style TargetType="{x:Type ComboBox}"> 
    <Setter Property="Height" Value="25"/> 
    <Setter Property="Width" Value="Auto"/> 
    <Setter Property="Margin" Value="0,0,0,8"/> 
    <Setter Property="IsEditable" Value="False"/> 
    <Setter Property="Focusable" Value="True"/> 
    <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
    <Setter Property="BorderBrush" Value="DarkGray" /> 
    <Setter Property="BorderThickness" Value="0.8"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="Padding" Value="4,3"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <Setter Property="ScrollViewer.PanningMode" Value="Both"/> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ComboBox}"> 
       <Grid x:Name="MainGrid" SnapsToDevicePixels="true"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/> 
        </Grid.ColumnDefinitions> 
        <Popup x:Name="PART_Popup" 
          AllowsTransparency="true" 
          Grid.ColumnSpan="2" 
          IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" 
          Margin="1" 
          PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" 
          Placement="Bottom"> 
         <Themes1:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" 
          MaxHeight="{TemplateBinding MaxDropDownHeight}" 
          MinWidth="{Binding ActualWidth, ElementName=MainGrid}"> 
          <Border x:Name="DropDownBorder" 
           BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" 
           BorderThickness="1" 
           Background="White"> 
           <ScrollViewer x:Name="DropDownScrollViewer"> 
            <Grid RenderOptions.ClearTypeHint="Enabled"> 
             <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
              <Rectangle 
               x:Name="OpaqueRect" 
               Fill="{Binding Background, ElementName=DropDownBorder}" 
               Height="{Binding ActualHeight, ElementName=DropDownBorder}" 
               Width="{Binding ActualWidth, ElementName=DropDownBorder}"/> 
             </Canvas> 
             <ItemsPresenter 
              x:Name="ItemsPresenter" 
              KeyboardNavigation.DirectionalNavigation="Contained" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
            </Grid> 
           </ScrollViewer> 
          </Border> 
         </Themes1:SystemDropShadowChrome> 
        </Popup> 
        <ToggleButton BorderBrush="White" 

         Grid.ColumnSpan="2" 
         IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
         Style="{StaticResource ComboBoxReadonlyToggleButton}"/> 
        <ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
         ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
         Content="{TemplateBinding SelectionBoxItem}" 
         ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" 
         HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         IsHitTestVisible="false" 
         Margin="{TemplateBinding Padding}" 
         SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
         VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Grid> 
       <ControlTemplate.Triggers > 
        <Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true"> 
         <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/> 
         <Setter Property="Color" TargetName="Shdw" Value="#71000000"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 

        <Trigger Property="HasItems" Value="false"> 
         <Setter Property="Height" TargetName="DropDownBorder" Value="95"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         <Setter Property="Background" Value="#FFF4F4F4"/> 

        </Trigger> 
        <Trigger Property="Selector.IsSelected" Value="True"> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 

        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsGrouping" Value="true"/> 
          <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
        </MultiTrigger> 
        <Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false"> 
         <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/> 
         <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter Property="BorderBrush" Value="{StaticResource NouvemSecondaryMainBrush}"/> 
         <Setter Property="BorderThickness" Value="1"/> 
         <Setter Property="Background" Value="{StaticResource NouvemWhiteBrush}"/> 
        </Trigger> 

       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

0

編寫自己的樣式以突出顯示邊框並將其作爲資源添加到Combobox的FocusVisualStyle中。

+0

非常感謝。這就是我一直在尋找的。 –

+0

關於造型的新手。如果有代碼表明這一點會很好。這正是我想要對我的自定義組合框樣式進行的操作。 – Bluto

相關問題