Themes/MaterialDesignTheme.DataGrid.ComboBox.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> <Style x:Key="FocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="2,2,2,2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeDashArray="1 2" StrokeThickness="1" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignDataGridComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" /> <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> <Setter Property="Padding" Value="8" /> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBoxItem}"> <Border x:Name="Bd" Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="Bd" Property="Opacity" Value="0.56" /> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="Bd" Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.ComboBoxSelected}" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="False" /> <Condition Property="IsMouseOver" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="Bd" Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.ComboBoxHover}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="False" /> <Condition Property="IsKeyboardFocused" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="Bd" Property="Background" Value="{DynamicResource MaterialDesign.Brush.TextBox.ComboBoxHover}" /> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> </Style> <Style x:Key="MaterialDesignDataGridComboBoxToggleButton" TargetType="{x:Type ToggleButton}"> <Setter Property="ClickMode" Value="Press" /> <Setter Property="Focusable" Value="false" /> <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" /> <Setter Property="IsTabStop" Value="false" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border x:Name="templateRoot" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true"> <Border x:Name="splitBorder" Margin="0" HorizontalAlignment="Right" VerticalAlignment="Center" BorderBrush="Transparent" BorderThickness="0" SnapsToDevicePixels="true"> <Viewbox Width="8" Height="8" Margin="2,2,0,0" VerticalAlignment="Center"> <Path x:Name="arrow" Margin="0" HorizontalAlignment="Right" VerticalAlignment="Center" Data="M0,0L5,5L10,0H7Z" Fill="{TemplateBinding BorderBrush}" SnapsToDevicePixels="True" /> </Viewbox> </Border> </Border> <ControlTemplate.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true" /> <Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="false" /> </MultiDataTrigger.Conditions> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true" /> <Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true" /> </MultiDataTrigger.Conditions> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </MultiDataTrigger> <Trigger Property="IsPressed" Value="true"> <Setter TargetName="arrow" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="arrow" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> </Trigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false" /> <Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="false" /> </MultiDataTrigger.Conditions> <Setter TargetName="templateRoot" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false" /> <Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true" /> </MultiDataTrigger.Conditions> <Setter TargetName="splitBorder" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> <Setter TargetName="templateRoot" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" /> </MultiDataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <ControlTemplate x:Key="MaterialDesignDataGridComboBoxTemplate" TargetType="{x:Type ComboBox}"> <Grid x:Name="templateRoot" SnapsToDevicePixels="true"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="0" MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" /> </Grid.ColumnDefinitions> <Popup x:Name="PART_Popup" Grid.ColumnSpan="2" Margin="1" AllowsTransparency="true" IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"> <Grid MaxHeight="{TemplateBinding MaxDropDownHeight}" UseLayoutRounding="True"> <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}"> <Border x:Name="shadow" Background="{DynamicResource MaterialDesign.Brush.Background}" BorderThickness="1" CornerRadius="2" Effect="{DynamicResource MaterialDesignShadowDepth2}" /> </AdornerDecorator> <Border x:Name="dropDownBorder" MinWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=DataGridCell}}" Margin="{Binding ElementName=shadow, Path=Margin, Mode=OneWay}" Background="Transparent" BorderBrush="{DynamicResource MaterialDesign.Brush.DataGrid.ComboBoxHover}" BorderThickness="1" CornerRadius="2"> <ScrollViewer x:Name="DropDownScrollViewer"> <Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled"> <Canvas x:Name="canvas" Width="0" Height="0" HorizontalAlignment="Left" VerticalAlignment="Top"> <Rectangle x:Name="opaqueRect" Width="{Binding ActualWidth, ElementName=dropDownBorder}" Height="{Binding ActualHeight, ElementName=dropDownBorder}" Fill="{Binding Background, ElementName=dropDownBorder}" /> </Canvas> <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" UseLayoutRounding="False" /> </Grid> </ScrollViewer> </Border> </Grid> </Popup> <ToggleButton x:Name="toggleButton" Grid.Column="0" Grid.ColumnSpan="2" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource MaterialDesignDataGridComboBoxToggleButton}" /> <wpf:SmartHint x:Name="Hint" Grid.Column="0" Margin="{TemplateBinding Padding}" FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}" FontSize="{TemplateBinding FontSize}" Hint="{TemplateBinding wpf:HintAssist.Hint}" HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}" HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}" UseLayoutRounding="{TemplateBinding UseLayoutRounding}" /> <ContentPresenter x:Name="contentPresenter" Grid.Column="0" Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" IsHitTestVisible="false" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Grid> <ControlTemplate.Triggers> <Trigger SourceName="PART_Popup" Property="HasDropShadow" Value="true"> <Setter TargetName="PART_Popup" Property="HorizontalOffset" Value="-5" /> <Setter TargetName="PART_Popup" Property="VerticalOffset" Value="-5" /> <Setter TargetName="shadow" Property="Margin" Value="5,5,5,5" /> </Trigger> <Trigger Property="HasItems" Value="false"> <Setter TargetName="dropDownBorder" Property="Height" Value="95" /> </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 SourceName="DropDownScrollViewer" Property="ScrollViewer.CanContentScroll" Value="false"> <Setter TargetName="opaqueRect" Property="Canvas.Left" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}" /> <Setter TargetName="opaqueRect" Property="Canvas.Top" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <Style x:Key="MaterialDesignDataGridComboBoxEditableTextBox" TargetType="{x:Type TextBox}"> <Setter Property="AllowDrop" Value="true" /> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="MinHeight" Value="0" /> <Setter Property="MinWidth" Value="0" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst" /> <Setter Property="Stylus.IsFlicksEnabled" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="wpf:TextFieldAssist.TextBoxViewMargin" Value="{x:Static wpf:Constants.DefaultTextBoxViewMarginEmbedded}" /> </Style> <ControlTemplate x:Key="MaterialDesignDataGridComboBoxEditableTemplate" TargetType="{x:Type ComboBox}"> <Grid x:Name="templateRoot" SnapsToDevicePixels="true"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="0" MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" /> </Grid.ColumnDefinitions> <Popup x:Name="PART_Popup" Grid.ColumnSpan="2" AllowsTransparency="true" IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"> <Grid MaxHeight="{TemplateBinding MaxDropDownHeight}" UseLayoutRounding="True"> <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}"> <Border x:Name="shadow" Background="{DynamicResource MaterialDesign.Brush.Background}" BorderThickness="1" CornerRadius="2" Effect="{DynamicResource MaterialDesignShadowDepth2}" /> </AdornerDecorator> <Border x:Name="dropDownBorder" MinWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=DataGridCell}}" Margin="{Binding ElementName=shadow, Path=Margin, Mode=OneWay}" Background="Transparent" BorderBrush="{DynamicResource MaterialDesign.Brush.DataGrid.ComboBoxHover}" BorderThickness="1" CornerRadius="2"> <ScrollViewer x:Name="DropDownScrollViewer"> <Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled"> <Canvas x:Name="canvas" Width="0" Height="0" HorizontalAlignment="Left" VerticalAlignment="Top"> <Rectangle x:Name="opaqueRect" Width="{Binding ActualWidth, ElementName=dropDownBorder}" Height="{Binding ActualHeight, ElementName=dropDownBorder}" Fill="{Binding Background, ElementName=dropDownBorder}" /> </Canvas> <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" UseLayoutRounding="False" /> </Grid> </ScrollViewer> </Border> </Grid> </Popup> <ToggleButton x:Name="toggleButton" Grid.Column="0" Grid.ColumnSpan="2" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource MaterialDesignDataGridComboBoxToggleButton}" /> <Border x:Name="border" Grid.Column="0" Margin="{TemplateBinding BorderThickness}" Background="Transparent"> <Grid> <wpf:SmartHint x:Name="Hint" Margin="{TemplateBinding Padding}" FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}" FontSize="{TemplateBinding FontSize}" Hint="{TemplateBinding wpf:HintAssist.Hint}" HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}" HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}" UseLayoutRounding="{TemplateBinding UseLayoutRounding}" /> <TextBox x:Name="PART_EditableTextBox" Margin="{TemplateBinding Padding}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" CaretBrush="{TemplateBinding Foreground}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource MaterialDesignDataGridComboBoxEditableTextBox}" /> </Grid> </Border> </Grid> <ControlTemplate.Triggers> <Trigger SourceName="PART_Popup" Property="HasDropShadow" Value="true"> <Setter TargetName="PART_Popup" Property="HorizontalOffset" Value="-5" /> <Setter TargetName="PART_Popup" Property="VerticalOffset" Value="-5" /> <Setter TargetName="shadow" Property="Margin" Value="5,5,5,5" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="border" Property="Opacity" Value="0.56" /> </Trigger> <Trigger Property="HasItems" Value="false"> <Setter TargetName="dropDownBorder" Property="Height" Value="95" /> </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 SourceName="DropDownScrollViewer" Property="ScrollViewer.CanContentScroll" Value="false"> <Setter TargetName="opaqueRect" Property="Canvas.Left" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}" /> <Setter TargetName="opaqueRect" Property="Canvas.Top" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <Style x:Key="MaterialDesignDataGridComboBox" TargetType="{x:Type ComboBox}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Setter Property="BorderThickness" Value="0,0,0,0" /> <!-- Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/ --> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" /> <Setter Property="IsSynchronizedWithCurrentItem" Value="False" /> <Setter Property="ItemContainerStyle" Value="{StaticResource MaterialDesignDataGridComboBoxItemStyle}" /> <!-- Virtualization --> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="Padding" Value="0,0,0,0" /> <Setter Property="ScrollViewer.CanContentScroll" Value="true" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.PanningMode" Value="Both" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="Stylus.IsFlicksEnabled" Value="False" /> <Setter Property="Template" Value="{StaticResource MaterialDesignDataGridComboBoxTemplate}" /> <Style.Triggers> <Trigger Property="IsEditable" Value="true"> <Setter Property="IsTabStop" Value="false" /> <Setter Property="Template" Value="{StaticResource MaterialDesignDataGridComboBoxEditableTemplate}" /> </Trigger> </Style.Triggers> </Style> </ResourceDictionary> |