Themes/MaterialDesignTheme.AutoSuggestBox.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:convertersInternal="clr-namespace:MaterialDesignThemes.Wpf.Converters.Internal"
                    xmlns:internal="clr-namespace:MaterialDesignThemes.Wpf.Internal"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"
                    xmlns:behaviors="clr-namespace:MaterialDesignThemes.Wpf.Behaviors">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Card.xaml" />
  </ResourceDictionary.MergedDictionaries>
 
  <Style x:Key="MaterialDesignAutoSuggestBoxBase"
         TargetType="{x:Type wpf:AutoSuggestBox}"
         BasedOn="{StaticResource MaterialDesignTextBoxBase}">
    <Style.Resources>
      <convertersInternal:TextFieldClearButtonVisibilityConverter x:Key="ClearButtonVisibilityConverter" ContentEmptyVisibility="Collapsed" />
      <converters:TextFieldPrefixTextVisibilityConverter x:Key="PrefixSuffixTextVisibilityConverter" HiddenState="Collapsed" />
      <converters:BooleanToDashStyleConverter x:Key="BooleanToDashStyleConverter" TrueValue="{x:Static DashStyles.Solid}" />
      <converters:ThicknessCloneConverter x:Key="HelperTextMarginConverter" CloneEdges="Left,Right" />
      <converters:MathConverter x:Key="DivisionConverter" Operation="Divide" Offset="1.5" />
      <converters:ThicknessCloneConverter x:Key="ThicknessCloneConverter" CloneEdges="All" AdditionalOffsetBottom="-1" />
      <converters:OutlinedStyleActiveBorderMarginCompensationConverter x:Key="OutlinedStyleActiveBorderMarginCompensationConverter" />
      <converters:ElevationRadiusConverter x:Key="ElevationRadiusConverter" Multiplier="-1" />
    </Style.Resources>
    <Setter Property="DropDownBackground" Value="{DynamicResource MaterialDesign.Brush.Card.Background}" />
    <Setter Property="DropDownElevation" Value="Dp2" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type wpf:AutoSuggestBox}">
          <Grid Cursor="{TemplateBinding Cursor, Converter={x:Static converters:CursorConverter.ArrowInstance}}">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="FocusStates">
                <VisualState x:Name="Focused">
                  <Storyboard TargetName="RippleOnFocusScaleTransform">
                    <DoubleAnimation Storyboard.TargetProperty="ScaleX"
                             From="0"
                             To="1"
                             Duration="0:0:0.3">
                      <DoubleAnimation.EasingFunction>
                        <SineEase EasingMode="EaseOut" />
                      </DoubleAnimation.EasingFunction>
                    </DoubleAnimation>
                    <DoubleAnimation Storyboard.TargetProperty="ScaleY"
                             From="0"
                             To="1"
                             Duration="0:0:0.3">
                      <DoubleAnimation.EasingFunction>
                        <SineEase EasingMode="EaseOut" />
                      </DoubleAnimation.EasingFunction>
                    </DoubleAnimation>
                    <DoubleAnimation BeginTime="0:0:0.45"
                             Storyboard.TargetProperty="ScaleX"
                             To="0"
                             Duration="0" />
                    <DoubleAnimation BeginTime="0:0:0.45"
                             Storyboard.TargetProperty="ScaleY"
                             To="0"
                             Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unfocused">
                  <Storyboard TargetName="RippleOnFocusScaleTransform">
                    <DoubleAnimation Storyboard.TargetProperty="ScaleX"
                             To="0"
                             Duration="0" />
                    <DoubleAnimation Storyboard.TargetProperty="ScaleY"
                             To="0"
                             Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    Background="{DynamicResource MaterialDesign.Brush.TextBox.HoverBackground}"
                    CornerRadius="{TemplateBinding wpf:TextFieldAssist.TextFieldCornerRadius}"
                    RenderTransformOrigin="0.5,0.5"
                    Visibility="{TemplateBinding wpf:TextFieldAssist.RippleOnFocusEnabled, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}">
              <Border.RenderTransform>
                <ScaleTransform x:Name="RippleOnFocusScaleTransform" ScaleX="0" ScaleY="0" />
              </Border.RenderTransform>
            </Border>
            <AdornerDecorator>
              <Border x:Name="OuterBorder"
                      Padding="{TemplateBinding Padding}"
                      wpf:BottomDashedLineAdorner.Brush="{TemplateBinding BorderBrush}"
                      wpf:BottomDashedLineAdorner.Thickness="{Binding RelativeSource={RelativeSource Self}, Path=BorderThickness}"
                      Background="{TemplateBinding Background}"
                      BorderBrush="{TemplateBinding BorderBrush}"
                      BorderThickness="{TemplateBinding BorderThickness}"
                      CornerRadius="{TemplateBinding wpf:TextFieldAssist.TextFieldCornerRadius}"
                      SnapsToDevicePixels="True">
 
                <Grid x:Name="ContentGrid"
                      MinHeight="16"
                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                  </Grid.ColumnDefinitions>
 
                  <wpf:PackIcon x:Name="LeadingPackIcon"
                                Grid.Column="0"
                                Width="{TemplateBinding wpf:TextFieldAssist.LeadingIconSize}"
                                Height="{TemplateBinding wpf:TextFieldAssist.LeadingIconSize}"
                                Margin="0,0,6,0"
                                VerticalAlignment="{TemplateBinding wpf:TextFieldAssist.IconVerticalAlignment}"
                                Kind="{TemplateBinding wpf:TextFieldAssist.LeadingIcon}"
                                Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                                Visibility="{TemplateBinding wpf:TextFieldAssist.HasLeadingIcon, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}" />
 
                  <ScrollViewer x:Name="PART_ContentHost"
                        Grid.Column="2"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Center"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Panel.ZIndex="1"
                        wpf:ScrollViewerAssist.IgnorePadding="True"
                        Cursor="{TemplateBinding Cursor, Converter={x:Static converters:CursorConverter.IBeamInstance}}"
                        Focusable="False"
                        HorizontalScrollBarVisibility="Hidden"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                        UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
                        VerticalScrollBarVisibility="Hidden" />
 
                  <wpf:SmartHint x:Name="Hint"
                                 Grid.Column="1"
                                 Grid.ColumnSpan="3"
                                 VerticalAlignment="Center"
                                 HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                 VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                 FloatingOffset="{TemplateBinding wpf:HintAssist.FloatingOffset}"
                                 FloatingScale="{TemplateBinding wpf:HintAssist.FloatingScale}"
                                 FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
                                 FontSize="{TemplateBinding FontSize}"
                                 HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                                 HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
                                 UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
                                 FloatingTarget="{Binding ElementName=PART_ContentHost}"
                                 HintHost="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                 wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
                                 wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}">
                    <wpf:SmartHint.InitialHorizontalOffset>
                      <MultiBinding Converter="{x:Static converters:FloatingHintInitialHorizontalOffsetConverter.Instance}">
                        <Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
                        <Binding ElementName="PrefixTextBlock" Path="Margin" />
                        <Binding ElementName="SuffixTextBlock" Path="ActualWidth" />
                        <Binding ElementName="SuffixTextBlock" Path="Margin" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.PrefixTextVisibility)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.SuffixTextVisibility)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.PrefixTextHintBehavior)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.SuffixTextHintBehavior)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="HorizontalContentAlignment" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="IsReadOnly" Converter="{x:Static converters:InvertBooleanConverter.Instance}" />
                      </MultiBinding>
                    </wpf:SmartHint.InitialHorizontalOffset>
                    <wpf:SmartHint.Margin>
                      <MultiBinding Converter="{x:Static converters:FloatingHintMarginConverter.Instance}">
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.IsFloating)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="IsKeyboardFocusWithin" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="IsReadOnly" Converter="{x:Static converters:InvertBooleanConverter.Instance}" />
                        <Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
                        <Binding ElementName="PrefixTextBlock" Path="Margin" />
                        <Binding ElementName="SuffixTextBlock" Path="ActualWidth" />
                        <Binding ElementName="SuffixTextBlock" Path="Margin" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.PrefixTextVisibility)" />
                        <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.SuffixTextVisibility)" />
                      </MultiBinding>
                    </wpf:SmartHint.Margin>
                    <wpf:SmartHint.Hint>
                      <Border x:Name="HintBackgroundBorder"
                              Background="{TemplateBinding wpf:HintAssist.Background}"
                              CornerRadius="2">
                        <ContentPresenter x:Name="HintWrapper" Content="{TemplateBinding wpf:HintAssist.Hint}" />
                      </Border>
                    </wpf:SmartHint.Hint>
                  </wpf:SmartHint>
 
                  <TextBlock x:Name="PrefixTextBlock"
                             Grid.Column="1"
                             Margin="0,0,2,0"
                             VerticalAlignment="Center"
                             FontSize="{TemplateBinding FontSize}"
                             Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                             Text="{TemplateBinding wpf:TextFieldAssist.PrefixText}">
                    <TextBlock.Visibility>
                      <MultiBinding Converter="{StaticResource PrefixSuffixTextVisibilityConverter}">
                        <Binding ElementName="Hint" Path="IsHintInFloatingPosition" />
                        <Binding Path="(wpf:TextFieldAssist.PrefixText)" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="(wpf:TextFieldAssist.PrefixTextVisibility)" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="IsKeyboardFocusWithin" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="IsReadOnly" RelativeSource="{RelativeSource TemplatedParent}" Converter="{x:Static converters:InvertBooleanConverter.Instance}" />
                      </MultiBinding>
                    </TextBlock.Visibility>
                  </TextBlock>
 
                  <TextBlock x:Name="SuffixTextBlock"
                             Grid.Column="3"
                             Margin="2,0,0,0"
                             VerticalAlignment="Center"
                             FontSize="{TemplateBinding FontSize}"
                             Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                             Text="{TemplateBinding wpf:TextFieldAssist.SuffixText}">
                    <TextBlock.Visibility>
                      <MultiBinding Converter="{StaticResource PrefixSuffixTextVisibilityConverter}">
                        <Binding ElementName="Hint" Path="IsHintInFloatingPosition" />
                        <Binding Path="(wpf:TextFieldAssist.SuffixText)" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="(wpf:TextFieldAssist.SuffixTextVisibility)" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="IsKeyboardFocusWithin" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding Path="IsReadOnly" RelativeSource="{RelativeSource TemplatedParent}" Converter="{x:Static converters:InvertBooleanConverter.Instance}" />
                      </MultiBinding>
                    </TextBlock.Visibility>
                  </TextBlock>
 
                  <wpf:PackIcon x:Name="TrailingPackIcon"
                        Grid.Column="4"
                        Width="{TemplateBinding wpf:TextFieldAssist.TrailingIconSize}"
                        Height="{TemplateBinding wpf:TextFieldAssist.TrailingIconSize}"
                        Margin="4,0,0,0"
                        VerticalAlignment="{TemplateBinding wpf:TextFieldAssist.IconVerticalAlignment}"
                        Kind="{TemplateBinding wpf:TextFieldAssist.TrailingIcon}"
                        Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                        Visibility="{TemplateBinding wpf:TextFieldAssist.HasTrailingIcon, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}" />
 
                  <Button x:Name="PART_ClearButton"
                          Grid.Column="5"
                          Height="{TemplateBinding wpf:TextFieldAssist.ClearButtonSize}"
                          Width="{TemplateBinding wpf:TextFieldAssist.ClearButtonSize}"
                          Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                          Padding="2,0,0,0"
                          Command="{x:Static internal:ClearText.ClearCommand}"
                          Focusable="False"
                          Foreground="{TemplateBinding Foreground}"
                          VerticalAlignment="{TemplateBinding wpf:TextFieldAssist.IconVerticalAlignment}"
                          Style="{StaticResource MaterialDesignToolButton}">
                    <Button.Visibility>
                      <MultiBinding Converter="{StaticResource ClearButtonVisibilityConverter}">
                        <Binding Path="(wpf:TextFieldAssist.HasClearButton)" RelativeSource="{RelativeSource TemplatedParent}" />
                        <Binding ElementName="Hint" Path="IsContentNullOrEmpty" />
                      </MultiBinding>
                    </Button.Visibility>
                    <wpf:PackIcon x:Name="ClearButtonIcon"
                                  Margin="0"
                                  Kind="CloseCircle"
                                  Height="auto"
                                  Width="auto" />
                  </Button>
                </Grid>
              </Border>
            </AdornerDecorator>
 
            <wpf:PopupEx x:Name="PART_AutoSuggestBoxPopup"
                         MaxHeight="{TemplateBinding DropDownMaxHeight}"
                         AllowsTransparency="True"
                         Focusable="False"
                         IsOpen="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSuggestionOpen, Mode=TwoWay}"
                         PopupAnimation="Slide"
                         SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                         StaysOpen="False"
                         Visibility="Collapsed">
              <wpf:Card x:Name="PopupCard"
                        Margin="{TemplateBinding DropDownElevation, Converter={x:Static converters:ElevationMarginConverter.Instance}}"
                        Background="{TemplateBinding DropDownBackground}"
                        Foreground="{DynamicResource MaterialDesignBody}"
                        RenderOptions.ClearTypeHint="Enabled"
                        Style="{StaticResource MaterialDesignElevatedCard}">
                <ListBox x:Name="PART_AutoSuggestBoxList"
                         Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ActualWidth}"
                         DisplayMemberPath="{TemplateBinding DisplayMember}"
                         Focusable="False"
                         IsSynchronizedWithCurrentItem="True"
                         SelectedIndex="-1"
                         ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
                         ItemTemplate="{TemplateBinding ItemTemplate}"
                         ItemsSource="{TemplateBinding Suggestions}"
                         SelectedItem="{TemplateBinding SelectedItem}"
                         SelectedValue="{TemplateBinding SelectedValue}"
                         SelectedValuePath="{TemplateBinding ValueMember}"
                         Style="{DynamicResource MaterialDesignCardsListBox}" />
              </wpf:Card>
            </wpf:PopupEx>
 
            <wpf:Underline x:Name="Underline"
                   VerticalAlignment="Bottom"
                   Background="{TemplateBinding wpf:TextFieldAssist.UnderlineBrush}"
                   CornerRadius="{TemplateBinding wpf:TextFieldAssist.UnderlineCornerRadius}"
                   Visibility="{TemplateBinding wpf:TextFieldAssist.DecorationVisibility}" />
 
            <Canvas VerticalAlignment="Bottom" IsHitTestVisible="False">
              <Border Canvas.Top="2"
                      Padding="{TemplateBinding Padding, Converter={StaticResource HelperTextMarginConverter}}"
                      Width="{Binding ActualWidth, ElementName=OuterBorder}">
                <Grid x:Name="FooterGrid">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto" />
                  </Grid.ColumnDefinitions>
                  <TextBlock x:Name="HelperTextTextBlock" Style="{Binding Path=(wpf:HintAssist.HelperTextStyle), RelativeSource={RelativeSource TemplatedParent}}" />
                  <Border x:Name="CharacterCounterContainer" Grid.Column="1">
                    <TextBlock x:Name="CharacterCounterTextBlock" Style="{Binding Path=(wpf:TextFieldAssist.CharacterCounterStyle), RelativeSource={RelativeSource TemplatedParent}}" />
                  </Border>
                </Grid>
              </Border>
            </Canvas>
          </Grid>
 
          <ControlTemplate.Triggers>
            <!-- Multi-line TextBox (i.e. AcceptsReturn) edge case -->
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
              </MultiTrigger.Conditions>
              <Setter TargetName="PART_ContentHost" Property="VerticalAlignment" Value="Stretch" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
                <Condition Property="AcceptsReturn" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="PrefixTextBlock" Property="VerticalAlignment" Value="Stretch" />
              <Setter TargetName="SuffixTextBlock" Property="VerticalAlignment" Value="Stretch" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
                <Condition Property="wpf:TextFieldAssist.TextBoxIsMultiLine" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="PrefixTextBlock" Property="VerticalAlignment" Value="Stretch" />
              <Setter TargetName="SuffixTextBlock" Property="VerticalAlignment" Value="Stretch" />
            </MultiTrigger>
 
            <!-- Floating hint -->
            <Trigger Property="wpf:HintAssist.IsFloating" Value="True">
              <Setter TargetName="Hint" Property="HintOpacity" Value="1" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="wpf:HintAssist.IsFloating" Value="True" />
                <Condition Property="IsKeyboardFocused" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="Hint" Property="Foreground" Value="{Binding Path=(wpf:HintAssist.Foreground), RelativeSource={RelativeSource TemplatedParent}}" />
            </MultiTrigger>
 
            <!-- Character counter -->
            <DataTrigger Value="0">
              <DataTrigger.Binding>
                <PriorityBinding>
                  <Binding FallbackValue="0"
                   Path="MaxLength"
                   RelativeSource="{RelativeSource Self}" />
                  <Binding Source="0" />
                </PriorityBinding>
              </DataTrigger.Binding>
              <Setter TargetName="CharacterCounterContainer" Property="Visibility" Value="Collapsed" />
            </DataTrigger>
 
            <!-- Outlined text field -->
            <Trigger Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True">
              <Setter TargetName="Underline" Property="Visibility" Value="Collapsed" />
              <Setter TargetName="Hint" Property="FloatingTarget" Value="{Binding ElementName=OuterBorder}" />
              <Setter TargetName="Hint" Property="FloatingAlignment" Value="Center" />
              <Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
              <Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
                <Condition Property="wpf:HintAssist.IsFloating" Value="True" />
                <Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="Hint" Property="wpf:HintAssist.ApplyHintPaddingBrush" Value="True" />
            </MultiTrigger>
 
            <!-- IsEnabled -->
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsEnabled" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="False" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="Transparent" />
              <Setter TargetName="PART_ClearButton" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
              <Setter TargetName="OuterBorder" Property="wpf:BottomDashedLineAdorner.IsAttached" Value="True" />
              <Setter TargetName="OuterBorder" Property="wpf:BottomDashedLineAdorner.DashStyle" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TextFieldAssist.HasFilledTextField), Converter={StaticResource BooleanToDashStyleConverter}}" />
              <Setter TargetName="ContentGrid" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsEnabled" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasFilledTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="PART_ClearButton" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsEnabled" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.TextBox.OutlineInactiveBorder}" />
              <Setter TargetName="PART_ClearButton" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
              <Setter TargetName="PART_ContentHost" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
              <Setter TargetName="PrefixTextBlock" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
              <Setter TargetName="SuffixTextBlock" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
              <Setter TargetName="ContentGrid" Property="Opacity" Value="{x:Static wpf:Constants.TextBoxNotEnabledOpacity}" />
            </MultiTrigger>
 
            <!-- IsKeyboardFocused -->
            <Trigger Property="IsKeyboardFocused" Value="True">
              <Setter TargetName="HintWrapper" Property="Opacity" Value="1" />
              <Setter Property="BorderBrush" Value="{Binding Path=(wpf:TextFieldAssist.UnderlineBrush), RelativeSource={RelativeSource Self}}" />
              <Setter TargetName="Underline" Property="IsActive" Value="True" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsKeyboardFocused" Value="True" />
                <Condition Property="Validation.HasError" Value="False" />
                <Condition Property="wpf:ValidationAssist.HasError" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{Binding Path=(wpf:TextFieldAssist.UnderlineBrush), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="OuterBorder" Property="BorderThickness" Value="{Binding Path=(wpf:TextFieldAssist.OutlinedBorderActiveThickness), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="ContentGrid" Property="Margin">
                <Setter.Value>
                  <MultiBinding Converter="{StaticResource OutlinedStyleActiveBorderMarginCompensationConverter}">
                    <Binding Path="BorderThickness" RelativeSource="{RelativeSource TemplatedParent}" />
                    <Binding Path="(wpf:TextFieldAssist.OutlinedBorderActiveThickness)" RelativeSource="{RelativeSource TemplatedParent}" />
                  </MultiBinding>
                </Setter.Value>
              </Setter>
            </MultiTrigger>
 
            <!-- IsMouseOver -->
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasFilledTextField" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="False" />
                <Condition Property="wpf:TextFieldAssist.NewSpecHighlightingEnabled" Value="False" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{Binding Path=(wpf:TextFieldAssist.UnderlineBrush), RelativeSource={RelativeSource TemplatedParent}}" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasFilledTextField" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="False" />
                <Condition Property="wpf:TextFieldAssist.NewSpecHighlightingEnabled" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderThickness" Value="0,0,0,2" />
              <Setter TargetName="OuterBorder" Property="Padding" Value="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ThicknessCloneConverter}}" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasFilledTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="Background" Value="{DynamicResource MaterialDesign.Brush.TextBox.HoverBackground}" />
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.TextBox.HoverBorder}" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="Validation.HasError" Value="False" />
                <Condition Property="wpf:ValidationAssist.HasError" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="OuterBorder" Property="BorderThickness" Value="{Binding Path=(wpf:TextFieldAssist.OutlinedBorderActiveThickness), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="ContentGrid" Property="Margin">
                <Setter.Value>
                  <MultiBinding Converter="{StaticResource OutlinedStyleActiveBorderMarginCompensationConverter}">
                    <Binding Path="BorderThickness" RelativeSource="{RelativeSource TemplatedParent}" />
                    <Binding Path="(wpf:TextFieldAssist.OutlinedBorderActiveThickness)" RelativeSource="{RelativeSource TemplatedParent}" />
                  </MultiBinding>
                </Setter.Value>
              </Setter>
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
                <Condition Property="wpf:HintAssist.IsFloating" Value="True" />
                <Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="HintWrapper" Property="Opacity" Value="1" />
            </MultiTrigger>
 
            <!-- VerticalContentAlignment.Stretch AND AcceptsReturn=False -->
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
                <Condition Property="AcceptsReturn" Value="False" />
              </MultiTrigger.Conditions>
              <Setter Property="wpf:TextFieldAssist.TextBoxViewVerticalAlignment" Value="Center" />
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
                <Condition Property="AcceptsReturn" Value="False" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="False" />
              </MultiTrigger.Conditions>
              <Setter TargetName="Hint" Property="InitialVerticalOffset">
                <Setter.Value>
                  <MultiBinding Converter="{x:Static converters:FloatingHintInitialVerticalOffsetConverter.Instance}">
                    <Binding ElementName="PART_ContentHost" Path="ActualHeight" />
                    <Binding ElementName="Hint" Path="ActualHeight" />
                    <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.TextBoxLineCount)" />
                  </MultiBinding>
                </Setter.Value>
              </Setter>
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="VerticalContentAlignment" Value="Stretch" />
                <Condition Property="AcceptsReturn" Value="False" />
                <Condition SourceName="PART_ContentHost" Property="ScrollViewer.ComputedHorizontalScrollBarVisibility" Value="Visible"/>
              </MultiTrigger.Conditions>
              <Setter Property="wpf:TextFieldAssist.TextBoxViewMargin" Value="{x:Static wpf:Constants.DefaultTextBoxViewMarginStretch}" />
            </MultiTrigger>
 
            <!-- Validation.HasError -->
            <Trigger Property="Validation.HasError" Value="true">
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
              <Setter TargetName="Underline" Property="Background" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
              <Setter TargetName="Hint" Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="Validation.HasError" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="FooterGrid" Property="Margin" Value="0,0,1,0" />
              <Setter TargetName="OuterBorder" Property="BorderThickness" Value="{Binding Path=(wpf:TextFieldAssist.OutlinedBorderActiveThickness), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="ContentGrid" Property="Margin">
                <Setter.Value>
                  <MultiBinding Converter="{StaticResource OutlinedStyleActiveBorderMarginCompensationConverter}">
                    <Binding Path="BorderThickness" RelativeSource="{RelativeSource TemplatedParent}" />
                    <Binding Path="(wpf:TextFieldAssist.OutlinedBorderActiveThickness)" RelativeSource="{RelativeSource TemplatedParent}" />
                  </MultiBinding>
                </Setter.Value>
              </Setter>
            </MultiTrigger>
            <!-- ValidationAssist.HasError (when TextBox is nested inside another control) -->
            <Trigger Property="wpf:ValidationAssist.HasError" Value="true">
              <Setter TargetName="OuterBorder" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
              <Setter TargetName="Underline" Property="Background" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
              <Setter TargetName="Hint" Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="wpf:ValidationAssist.HasError" Value="True" />
                <Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="FooterGrid" Property="Margin" Value="0,0,1,0" />
              <Setter TargetName="OuterBorder" Property="BorderThickness" Value="{Binding Path=(wpf:TextFieldAssist.OutlinedBorderActiveThickness), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="ContentGrid" Property="Margin">
                <Setter.Value>
                  <MultiBinding Converter="{StaticResource OutlinedStyleActiveBorderMarginCompensationConverter}">
                    <Binding Path="BorderThickness" RelativeSource="{RelativeSource TemplatedParent}" />
                    <Binding Path="(wpf:TextFieldAssist.OutlinedBorderActiveThickness)" RelativeSource="{RelativeSource TemplatedParent}" />
                  </MultiBinding>
                </Setter.Value>
              </Setter>
            </MultiTrigger>
 
            <!-- Display Shadow -->
            <Trigger Property="DropDownElevation" Value="Dp0">
              <Setter TargetName="PopupCard" Property="Style" Value="{StaticResource MaterialDesignOutlinedCard}" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignAutoSuggestBox"
         TargetType="{x:Type wpf:AutoSuggestBox}"
         BasedOn="{StaticResource MaterialDesignAutoSuggestBoxBase}">
    <Setter Property="Padding" Value="{x:Static wpf:Constants.TextBoxDefaultPadding}" />
    <Setter Property="wpf:BehaviorsAssist.Behaviors">
      <Setter.Value>
        <wpf:BehaviorCollection>
          <behaviors:TextBoxLineCountBehavior />
        </wpf:BehaviorCollection>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignFloatingHintAutoSuggestBox"
         TargetType="{x:Type wpf:AutoSuggestBox}"
         BasedOn="{StaticResource MaterialDesignAutoSuggestBox}">
    <Setter Property="wpf:HintAssist.IsFloating" Value="True" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.FloatingTextBoxDefaultPadding}" />
  </Style>
 
  <Style x:Key="MaterialDesignFilledAutoSuggestBox"
         TargetType="{x:Type wpf:AutoSuggestBox}"
         BasedOn="{StaticResource MaterialDesignFloatingHintAutoSuggestBox}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.TextBox.FilledBackground}" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.FilledTextBoxDefaultPadding}" />
    <Setter Property="wpf:TextFieldAssist.HasFilledTextField" Value="True" />
    <Setter Property="wpf:TextFieldAssist.TextFieldCornerRadius" Value="4,4,0,0" />
    <Setter Property="wpf:TextFieldAssist.UnderlineCornerRadius" Value="0" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedAutoSuggestBox"
         TargetType="{x:Type wpf:AutoSuggestBox}"
         BasedOn="{StaticResource MaterialDesignFloatingHintAutoSuggestBox}">
    <Setter Property="DropDownElevation" Value="Dp0" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.TextBox.OutlineBorder}" />
    <Setter Property="BorderThickness" Value="{x:Static wpf:Constants.DefaultOutlinedBorderInactiveThickness}" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.OutlinedTextBoxDefaultPadding}" />
    <Setter Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
    <Setter Property="wpf:TextFieldAssist.TextFieldCornerRadius" Value="4" />
  </Style>
 
</ResourceDictionary>