<!--***********************************************************************************

   Extended WPF Toolkit

   Copyright (C) 2007-2013 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 

   For more features, controls, and fast professional support,
   pick up the Plus Edition at http://xceed.com/wpf_toolkit

   Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids

  **********************************************************************************-->

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Xceed.Wpf.Toolkit"
                    xmlns:themes="clr-namespace:Xceed.Wpf.Toolkit.Themes"
                    xmlns:prim="clr-namespace:Xceed.Wpf.Toolkit.Primitives"
                    xmlns:conv="clr-namespace:Xceed.Wpf.Toolkit.Core.Converters">

   <conv:InverseBoolConverter x:Key="InverseBoolConverter" />

   <DataTemplate x:Key="DefaultWatermarkTemplate">
      <ContentControl Content="{Binding}" Foreground="Gray" Focusable="False" Margin="0,0,3,0" />
   </DataTemplate>

   <Style x:Key="NumericUpDown" TargetType="{x:Type prim:InputBase}">
      <Setter Property="Background" Value="{DynamicResource {x:Static themes:ResourceKeys.ControlNormalBackgroundKey}}" />
      <Setter Property="BorderBrush" Value="{DynamicResource {x:Static themes:ResourceKeys.ControlNormalBorderKey}}" />
      <Setter Property="BorderThickness" Value="1" />
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
      <Setter Property="HorizontalContentAlignment" Value="Right" />
      <Setter Property="IsTabStop"  Value="False" />
      <Setter Property="VerticalContentAlignment" Value="Center" />
      <Setter Property="TextAlignment" Value="Right" />
      <Setter Property="WatermarkTemplate" Value="{StaticResource DefaultWatermarkTemplate}" />
        <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="Control">
               <local:ButtonSpinner x:Name="PART_Spinner"
                                    IsTabStop="False"
                                    Background="{TemplateBinding Background}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    HorizontalContentAlignment="Stretch"
                                    VerticalContentAlignment="Stretch"
                                    AllowSpin="{Binding AllowSpin, RelativeSource={RelativeSource TemplatedParent}}"
                                    ShowButtonSpinner="{Binding ShowButtonSpinner, RelativeSource={RelativeSource TemplatedParent}}"
                                    ButtonSpinnerLocation="{Binding ButtonSpinnerLocation, RelativeSource={RelativeSource TemplatedParent}}">
                        <local:WatermarkTextBox x:Name="PART_TextBox"
                                          BorderThickness="0"
                                          Background="Transparent"
                                          ContextMenu="{TemplateBinding ContextMenu}"
                                          FontFamily="{TemplateBinding FontFamily}" 
                                          FontSize="{TemplateBinding FontSize}" 
                                          FontStretch="{TemplateBinding FontStretch}"
                                          FontStyle="{TemplateBinding FontStyle}" 
                                          FontWeight="{TemplateBinding FontWeight}" 
                                          Foreground="{TemplateBinding Foreground}" 
                                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          IsUndoEnabled="{Binding IsUndoEnabled, RelativeSource={RelativeSource TemplatedParent}}"
                                          IsTabStop="True"
                                          MinWidth="20"
                                          AcceptsReturn="False"
                                          Padding="{TemplateBinding Padding}"
                                          SelectAllOnGotFocus="{Binding SelectAllOnGotFocus, RelativeSource={RelativeSource TemplatedParent}}"
                                          AutoSelectBehavior="{Binding AutoSelectBehavior, RelativeSource={RelativeSource TemplatedParent}}"
                                          AutoMoveFocus="{Binding AutoMoveFocus, RelativeSource={RelativeSource TemplatedParent}}"
                                          TextAlignment="{Binding TextAlignment, RelativeSource={RelativeSource TemplatedParent}}"
                                          TextWrapping="NoWrap" 
                                          TabIndex="{TemplateBinding TabIndex}"
                                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                          Watermark="{Binding Watermark, RelativeSource={RelativeSource TemplatedParent}}"
                                          WatermarkTemplate="{Binding WatermarkTemplate, RelativeSource={RelativeSource TemplatedParent}}" />
               </local:ButtonSpinner>
               <ControlTemplate.Triggers>
                  <MultiDataTrigger>
                     <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}"
                                   Value="False" />
                        <Condition Binding="{Binding AllowTextInput, RelativeSource={RelativeSource Self}}"
                                   Value="False" />
                     </MultiDataTrigger.Conditions>
                     <Setter Property="IsReadOnly"
                             Value="True"
                             TargetName="PART_TextBox" />
                  </MultiDataTrigger>
                  <DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}"
                               Value="True">
                     <Setter Property="IsReadOnly"
                             Value="True"
                             TargetName="PART_TextBox" />
                  </DataTrigger>
                  <Trigger Property="IsEnabled" Value="False">
                     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                  </Trigger>
                   <Trigger Property="IsFocused" Value="True">
                       <Setter TargetName="PART_TextBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=PART_TextBox}" />
                   </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <!-- =============================================================================== -->
   <!-- DecimalUpDown                                                                   -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:DecimalUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- DoubleUpDown                                                                    -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:DoubleUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- IntegerUpDown                                                                   -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:IntegerUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- ShortUpDown                                                                     -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:ShortUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- LongUpDown                                                                      -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:LongUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- ByteUpDown                                                                      -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:ByteUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- SingleUpDown                                                                    -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:SingleUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- ===============================================================================   -->
   <!-- Style for all internal derived types of NumericUpDown will be done in code-behind -->
   <!-- for external themes to redefine the default style. The reason is that the         -->
   <!-- toolkit.dll uses the InternalsVisibleTo attribute which makes internal data only  -->
   <!-- available in code-behind(not xaml).                                               -->        
   <!-- (ex. Office2007 theme)                                                            -->
   <!-- ===============================================================================   -->

   <!-- =============================================================================== -->
   <!-- SByteUpDown                                                                     -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:SByteUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- UIntegerUpDown                                                                  -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:UIntegerUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- ULongUpDown                                                                     -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:ULongUpDown}" BasedOn="{StaticResource NumericUpDown}" />

   <!-- =============================================================================== -->
   <!-- UShortUpDown                                                                    -->
   <!-- =============================================================================== -->
   <Style TargetType="{x:Type local:UShortUpDown}" BasedOn="{StaticResource NumericUpDown}" />

</ResourceDictionary>
