aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Utils/Win32.cs
blob: 421c35c5a5e45bcbc935910d9dc88071defce97d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;

namespace Tango.Scripting.Editors.Utils
{
	/// <summary>
	/// Wrapper around Win32 functions.
	/// </summary>
	static class Win32
	{
		/// <summary>
		/// Gets the caret blink time.
		/// </summary>
		public static TimeSpan CaretBlinkTime {
			get { return TimeSpan.FromMilliseconds(SafeNativeMethods.GetCaretBlinkTime()); }
		}
		
		/// <summary>
		/// Creates an invisible Win32 caret for the specified Visual with the specified size (coordinates local to the owner visual).
		/// </summary>
		public static bool CreateCaret(Visual owner, Size size)
		{
			if (owner == null)
				throw new ArgumentNullException("owner");
			HwndSource source = PresentationSource.FromVisual(owner) as HwndSource;
			if (source != null) {
				Vector r = owner.PointToScreen(new Point(size.Width, size.Height)) - owner.PointToScreen(new Point(0, 0));
				return SafeNativeMethods.CreateCaret(source.Handle, IntPtr.Zero, (int)Math.Ceiling(r.X), (int)Math.Ceiling(r.Y));
			} else {
				return false;
			}
		}
		
		/// <summary>
		/// Sets the position of the caret previously created using <see cref="CreateCaret"/>. position is relative to the owner visual.
		/// </summary>
		public static bool SetCaretPosition(Visual owner, Point position)
		{
			if (owner == null)
				throw new ArgumentNullException("owner");
			HwndSource source = PresentationSource.FromVisual(owner) as HwndSource;
			if (source != null) {
				Point pointOnRootVisual = owner.TransformToAncestor(source.RootVisual).Transform(position);
				Point pointOnHwnd = pointOnRootVisual.TransformToDevice(source.RootVisual);
				return SafeNativeMethods.SetCaretPos((int)pointOnHwnd.X, (int)pointOnHwnd.Y);
			} else {
				return false;
			}
		}
		
		/// <summary>
		/// Destroys the caret previously created using <see cref="CreateCaret"/>.
		/// </summary>
		public static bool DestroyCaret()
		{
			return SafeNativeMethods.DestroyCaret();
		}
		
		[SuppressUnmanagedCodeSecurity]
		static class SafeNativeMethods
		{
			[DllImport("user32.dll")]
			public static extern int GetCaretBlinkTime();
			
			[DllImport("user32.dll")]
			[return: MarshalAs(UnmanagedType.Bool)]
			public static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
			
			[DllImport("user32.dll")]
			[return: MarshalAs(UnmanagedType.Bool)]
			public static extern bool SetCaretPos(int x, int y);
			
			[DllImport("user32.dll")]
			[return: MarshalAs(UnmanagedType.Bool)]
			public static extern bool DestroyCaret();
		}
	}
}
ight.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/materialdesigncolor.lightblue.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/materialdesigncolor.yellow.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.CheckBox.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ListBox.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.RadioButton.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ToggleButton.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.TextBlock.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.Label.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.Slider.xaml"> </ResourceDictionary> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.ProgressBar.xaml"/> <ResourceDictionary Source="GradientOffsetSlider.xaml" /> <!--MahApps Brushes--> <ResourceDictionary> <SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource Primary700}" /> <SolidColorBrush x:Key="AccentColorBrush" Color="{DynamicResource Primary500}" /> <SolidColorBrush x:Key="AccentColorBrush2" Color="{DynamicResource Primary400}" /> <SolidColorBrush x:Key="AccentColorBrush3" Color="{DynamicResource Primary300}" /> <SolidColorBrush x:Key="AccentColorBrush4" Color="{DynamicResource Primary200}" /> <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{DynamicResource Primary700}" /> <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="{DynamicResource Primary500Foreground}" /> <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5"> <GradientStop Color="{DynamicResource Primary700}" Offset="0" /> <GradientStop Color="{DynamicResource Primary300}" Offset="1" /> </LinearGradientBrush> <SolidColorBrush x:Key="CheckmarkFill" Color="{DynamicResource Primary500}" /> <SolidColorBrush x:Key="RightArrowFill" Color="{DynamicResource Primary500}" /> <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{DynamicResource Primary500Foreground}" /> <SolidColorBrush x:Key="IdealForegroundDisabledBrush" Color="{DynamicResource Primary500}" Opacity="0.4" /> </ResourceDictionary> <!--Fonts--> <ResourceDictionary> <FontFamily x:Key="digital-7">../Fonts/#digital-7</FontFamily> </ResourceDictionary> <!--Styles--> <ResourceDictionary> <BooleanToVisibilityConverter x:Key="BoolToVisConverter" /> <converters:TextFieldHintVisibilityConverter x:Key="TextFieldHintVisibilityConverter" /> <Style TargetType="editors:AutoCompleteTextBox" > <Setter Property="Focusable" Value="True" /> <Setter Property="BorderThickness" Value="0 0 0 1"/> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesignTextBoxBorder}" /> <Setter Property="Background" Value="Transparent"/> <!--<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>--> <Setter Property="HorizontalContentAlignment" Value="Left"/> <Setter Property="VerticalContentAlignment" Value="Top"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="AllowDrop" Value="true"/> <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource MaterialDesignValidationErrorTemplate}"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type editors:AutoCompleteTextBox}"> <Grid> <DockPanel> <ContentPresenter ContentSource="Icon" x:Name="PART_Icon" Visibility="{TemplateBinding IconVisibility}" /> <Grid> <TextBlock x:Name="PART_Watermark" Text="{TemplateBinding Watermark}" Visibility="Collapsed" VerticalAlignment="Center" HorizontalAlignment="Left" Focusable="False" Foreground="Gray" Margin="3,0" /> <TextBox x:Name="PART_Editor" Focusable="True" HorizontalAlignment="Stretch" VerticalAlignment="Center" Style="{StaticResource ResourceKey=MaterialDesignTextBox}" MaxLength="{Binding Path=MaxLength, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay}" CharacterCasing="{Binding Path=CharacterCasing, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay}" Text="{Binding Path=Text, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay}" /> </Grid> </DockPanel> <Popup x:Name="PART_Popup" IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}" Width="{TemplateBinding ActualWidth}" HorizontalOffset="0" MinHeight="25" MaxHeight="600" AllowsTransparency="True" PopupAnimation="Slide" Focusable="False"> <Border Background="White" BorderThickness="1" BorderBrush="#BDBDBD" CornerRadius="0" Padding="2"> <Grid> <ListBox x:Name="PART_Selector" ItemTemplate="{TemplateBinding ItemTemplate}" ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}" Focusable="False" BorderThickness="0" MaxHeight="{Binding Path=MaxPopupHeight, RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" > </ListBox> <Border Visibility="{Binding Path=IsLoading, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ResourceKey=BoolToVisConverter}}"> <ContentPresenter ContentSource="LoadingContent"/> </Border> </Grid> </Border> </Popup> </Grid> <!--</Border>--> <ControlTemplate.Triggers> <Trigger Property="Text" Value="" SourceName="PART_Editor"> <Setter Property="Visibility" Value="Visible" TargetName="PART_Watermark" /> </Trigger> <Trigger Property="IconPlacement" Value="Left"> <Setter Property="DockPanel.Dock" Value="Left" TargetName="PART_Icon" /> </Trigger> <Trigger Property="IconPlacement" Value="Right"> <Setter Property="DockPanel.Dock" Value="Right" TargetName="PART_Icon" /> </Trigger> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="BorderBrush" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <!--Extensions--> <FontFamily x:Key="FontName">Segoe UI</FontFamily> <FontFamily x:Key="NotesFont">Lucida Console</FontFamily> <sys:Double x:Key="ExtraExtraLargeFontSize">28</sys:Double> <sys:Double x:Key="ExtraLargeFontSize">26</sys:Double> <sys:Double x:Key="LargeFontSize">20</sys:Double> <sys:Double x:Key="MediumFontSize">16</sys:Double> <sys:Double x:Key="SmallFontSize">14</sys:Double> <sys:Double x:Key="MiniFontSize">12</sys:Double> <sys:Double x:Key="TinyFontSize">9</sys:Double> <!--Colors--> <Color x:Key="borderColor">Silver</Color> <Color x:Key="graphGridLinesColor">#FFE9E9E9</Color> <Color x:Key="graphsMarkerColor">Gray</Color> <Color x:Key="materialColor">#03A9F4</Color> <!--Brushes--> <SolidColorBrush x:Key="borderBrush" Color="{StaticResource borderColor}"></SolidColorBrush> <SolidColorBrush x:Key="graphGridLinesBrush" Color="{StaticResource graphGridLinesColor}"></SolidColorBrush> <SolidColorBrush x:Key="BlackBrush" Color="#545454"></SolidColorBrush> <SolidColorBrush x:Key="graphGridLinesLightBrush" Color="{StaticResource graphGridLinesColor}"></SolidColorBrush> <SolidColorBrush x:Key="graphGridLinesDarkBrush" Color="#FF2E2E2E"></SolidColorBrush> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphBackgroundLight"> <GradientStop Color="White"/> <GradientStop Color="#FFE9E9E9" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphBackgroundDark"> <GradientStop Color="Black"/> <GradientStop Color="#FF333333" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphBackground"> <GradientStop Color="White"/> <GradientStop Color="#FFE9E9E9" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphLabelBackground" Opacity="0.7"> <GradientStop Color="White"/> <GradientStop Color="#FFD9D9D9" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphLegendBackground" Opacity="0.7"> <GradientStop Color="#FFE9E9E9"/> <GradientStop Color="#FFBDBDBD" Offset="1"/> </LinearGradientBrush> <SolidColorBrush Color="#FFF1F1F1" x:Key="topBarBackgroundBrush"></SolidColorBrush> <!--Brushes--> <!--Graph Label--> <Style x:Key="graphLabel" TargetType="Label"> <Style.Setters> <Setter Property="IsHitTestVisible" Value="False"></Setter> <Setter Property="Margin" Value="-1 -1 0 0"></Setter> <Setter Property="HorizontalAlignment" Value="Left"></Setter> <Setter Property="VerticalAlignment" Value="Top"></Setter> <Setter Property="Padding" Value="0"></Setter> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Border Width="Auto" Padding="0 0 20 0" Height="25" BorderBrush="{StaticResource AccentColorBrush}" BorderThickness="1" CornerRadius="0 0 30 0" Background="{StaticResource graphLabelBackground}" > <Label Margin="5 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="{StaticResource TinyFontSize}" Content="{Binding}"></Label> </Border> </DataTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> <!--Graph Label--> <!--Graph Ticks Template--> <DataTemplate x:Key="graphTicksTemplate"> <Ellipse Width="3" Height="3" Margin="0 0 0 0" Fill="{StaticResource AccentColorBrush}"></Ellipse> </DataTemplate> <!--Graph Ticks Template--> <DataTemplate x:Key="graphTooltipTemplate"> <Border CornerRadius="5" BorderThickness="1" BorderBrush="White" Padding="8" MinWidth="50" Margin="20 0 20 0"> <Border.Background> <SolidColorBrush Color="Black" Opacity="0.5"></SolidColorBrush> </Border.Background> <TextBlock Foreground="White" FontSize="10" HorizontalAlignment="Center" TextAlignment="Center" Text="{Binding StringFormat='0.000'}"></TextBlock> </Border> </DataTemplate> <!--Graph Legend Template--> <DataTemplate x:Key="graphLegendTemplate"> <Border Width="20" Height="20" Margin="2"> <Grid> <ToggleButton IsChecked="{Binding IsVisible}" Padding="0" Margin="0" Background="Transparent" BorderBrush="{x:Null}" BorderThickness="0"> <ToggleButton.Style> <Style TargetType="ToggleButton"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid Background="Transparent"> <Grid> <Ellipse HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Fill="{StaticResource graphLegendBackground}" StrokeThickness="1"> <Ellipse.Style> <Style TargetType="Ellipse"> <Style.Triggers> <DataTrigger Binding="{Binding IsVisible}" Value="True"> <Setter Property="Stroke" Value="{Binding Stroke}"></Setter> </DataTrigger> <DataTrigger Binding="{Binding IsVisible}" Value="False"> <Setter Property="Stroke" Value="Transparent"></Setter> </DataTrigger> </Style.Triggers> </Style> </Ellipse.Style> </Ellipse> <TextBlock FontSize="8" Text="{Binding Name}" VerticalAlignment="Center" Foreground="Black" FontWeight="DemiBold" HorizontalAlignment="Center"></TextBlock> </Grid> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </ToggleButton.Style> </ToggleButton> </Grid> </Border> </DataTemplate> <!--Graph Legend Template--> <Style TargetType="{x:Type ListBoxItem}" x:Key="basicListBoxItem"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderThickness" Value="0"></Setter> <Setter Property="FocusVisualStyle" Value="{x:Null}"></Setter> <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> <Setter Property="Padding" Value="0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBoxItem}"> <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="{TemplateBinding Background}" Padding="0" SnapsToDevicePixels="true"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" TargetName="Bd" Value="Transparent"/> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="true"/> <Condition Property="Selector.IsSelectionActive" Value="false"/> </MultiTrigger.Conditions> <Setter Property="Background" TargetName="Bd" Value="Transparent"/> </MultiTrigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <PathGeometry x:Key="CirclePath">M46.615 402.03c6.549 9.313 13.718 18.176 21.456 26.528l23.472-21.728c-6.767-7.3-13.038-15.045-18.768-23.184 L46.615 402.03z M32.007 254.83c0.178-112.07 83.047-206.811 194.096-221.904l-4.192-31.728C81.787 20.041-16.53 148.91 2.314 289.033 c3.942 29.31 12.932 57.716 26.573 83.957l28.368-14.784C40.563 326.311 31.897 290.828 32.007 254.83z M92.807 452.03c8.765 7.252 17.995 13.923 27.632 19.968l16.976-27.2c-8.448-5.292-16.535-11.139-24.208-17.504 L92.807 452.03z M361.761 21.742c-22.756-10.308-46.898-17.229-71.658-20.544l-4.192 31.728 c122.555 16.88 208.221 129.915 191.341 252.469C462.017 396.001 367.656 478.501 256.007 478.83 c-31.831 0.078-63.306-6.694-92.288-19.856l-13.216 29.152c128.788 58.337 280.484 1.225 338.821-127.563 C547.661 231.775 490.549 80.079 361.761 21.742z</PathGeometry> <Style TargetType="ContentControl" x:Key="numberBorder"> <Style.Setters> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ContentControl"> <Grid> <Viewbox> <Path Data="{StaticResource CirclePath}" Fill="{TemplateBinding Foreground}"></Path> </Viewbox> <ContentPresenter Content="{TemplateBinding Content}" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> <Style x:Key="emptyToggleButton" TargetType="ToggleButton"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ToggleButton"> <Grid Background="{TemplateBinding Background}"> <ContentPresenter /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="emptyButton" TargetType="Button"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid Background="{TemplateBinding Background}"> <ContentPresenter /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <!--Drag & Drop--> <Style x:Key="draggableGrid" TargetType="Grid"> <Setter Property="RenderTransform"> <Setter.Value> <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> </Setter.Value> </Setter> <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Draggable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.DraggingSurface" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"></Setter> </Style> <Style x:Key="droppableGrid" TargetType="Grid"> <Setter Property="RenderTransform"> <Setter.Value> <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> </Setter.Value> </Setter> <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Droppable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.DraggingSurface" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"></Setter> <Style.Triggers> <Trigger Property="dragAndDrop:DragAndDropService.IsDraggableOver" Value="True"> <Setter Property="Opacity" Value="0.5"></Setter> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style> <Style x:Key="draggableDroppableGrid" TargetType="Grid"> <Setter Property="RenderTransform"> <Setter.Value> <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> </Setter.Value> </Setter> <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Draggable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Droppable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.DraggingSurface" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"></Setter> <Style.Triggers> <Trigger Property="dragAndDrop:DragAndDropService.IsDraggableOver" Value="True"> <Setter Property="Opacity" Value="0.5"></Setter> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style> <!--Drag & Drop--> <!--Extensions--> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>