diff --git a/ReactWindows/ReactNative.Net46/ReactNative.Net46.csproj b/ReactWindows/ReactNative.Net46/ReactNative.Net46.csproj
index 79dd1f9d42c..004a741bb1e 100644
--- a/ReactWindows/ReactNative.Net46/ReactNative.Net46.csproj
+++ b/ReactWindows/ReactNative.Net46/ReactNative.Net46.csproj
@@ -1,4 +1,4 @@
-
+
@@ -61,6 +61,7 @@
True
+
@@ -89,6 +90,7 @@
..\packages\PCLStorage.1.0.2\lib\net45\PCLStorage.Abstractions.dll
True
+
@@ -125,4 +127,4 @@
-->
-
+
\ No newline at end of file
diff --git a/ReactWindows/ReactNative.Shared/ReactNative.Shared.projitems b/ReactWindows/ReactNative.Shared/ReactNative.Shared.projitems
index f84fe379d10..d31b840178e 100644
--- a/ReactWindows/ReactNative.Shared/ReactNative.Shared.projitems
+++ b/ReactWindows/ReactNative.Shared/ReactNative.Shared.projitems
@@ -105,19 +105,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ReactWindows/ReactNative/UIManager/BorderExtensions.cs b/ReactWindows/ReactNative.Shared/UIManager/BorderExtensions.cs
similarity index 92%
rename from ReactWindows/ReactNative/UIManager/BorderExtensions.cs
rename to ReactWindows/ReactNative.Shared/UIManager/BorderExtensions.cs
index 6b5a65c3f82..dff8e319b65 100644
--- a/ReactWindows/ReactNative/UIManager/BorderExtensions.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/BorderExtensions.cs
@@ -1,6 +1,11 @@
using Facebook.CSSLayout;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
+#else
+using System.Windows;
+using System.Windows.Controls;
+#endif
namespace ReactNative.UIManager
{
diff --git a/ReactWindows/ReactNative/UIManager/ColorHelpers.cs b/ReactWindows/ReactNative.Shared/UIManager/ColorHelpers.cs
similarity index 86%
rename from ReactWindows/ReactNative/UIManager/ColorHelpers.cs
rename to ReactWindows/ReactNative.Shared/UIManager/ColorHelpers.cs
index 7d01c6ed528..4bb6e376831 100644
--- a/ReactWindows/ReactNative/UIManager/ColorHelpers.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/ColorHelpers.cs
@@ -1,4 +1,8 @@
-using Windows.UI;
+#if WINDOWS_UWP
+using Windows.UI;
+#else
+using System.Windows.Media;
+#endif
namespace ReactNative.UIManager
{
diff --git a/ReactWindows/ReactNative/UIManager/DependencyObjectExtensions.cs b/ReactWindows/ReactNative.Shared/UIManager/DependencyObjectExtensions.cs
similarity index 99%
rename from ReactWindows/ReactNative/UIManager/DependencyObjectExtensions.cs
rename to ReactWindows/ReactNative.Shared/UIManager/DependencyObjectExtensions.cs
index 4ebce7b03aa..124f8b29c60 100644
--- a/ReactWindows/ReactNative/UIManager/DependencyObjectExtensions.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/DependencyObjectExtensions.cs
@@ -1,6 +1,10 @@
using System;
using System.Runtime.CompilerServices;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
+#else
+using System.Windows;
+#endif
using static System.FormattableString;
namespace ReactNative.UIManager
diff --git a/ReactWindows/ReactNative/UIManager/Events/EventDispatcher.cs b/ReactWindows/ReactNative.Shared/UIManager/Events/EventDispatcher.cs
similarity index 99%
rename from ReactWindows/ReactNative/UIManager/Events/EventDispatcher.cs
rename to ReactWindows/ReactNative.Shared/UIManager/Events/EventDispatcher.cs
index 27255f7c158..ba4c0847ccc 100644
--- a/ReactWindows/ReactNative/UIManager/Events/EventDispatcher.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/Events/EventDispatcher.cs
@@ -3,7 +3,11 @@
using System;
using System.Collections.Generic;
using System.Threading;
+#if WINDOWS_UWP
using Windows.UI.Xaml.Media;
+#else
+using System.Windows.Media;
+#endif
using static System.FormattableString;
namespace ReactNative.UIManager.Events
diff --git a/ReactWindows/ReactNative/UIManager/IReactCompoundView.cs b/ReactWindows/ReactNative.Shared/UIManager/IReactCompoundView.cs
similarity index 95%
rename from ReactWindows/ReactNative/UIManager/IReactCompoundView.cs
rename to ReactWindows/ReactNative.Shared/UIManager/IReactCompoundView.cs
index 7c97ff99731..2ce8730c5fc 100644
--- a/ReactWindows/ReactNative/UIManager/IReactCompoundView.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/IReactCompoundView.cs
@@ -3,8 +3,12 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+#if WINDOWS_UWP
using Windows.Foundation;
using Windows.UI.Xaml;
+#else
+using System.Windows;
+#endif
namespace ReactNative.UIManager
{
diff --git a/ReactWindows/ReactNative/UIManager/IRootView.cs b/ReactWindows/ReactNative.Shared/UIManager/IRootView.cs
similarity index 83%
rename from ReactWindows/ReactNative/UIManager/IRootView.cs
rename to ReactWindows/ReactNative.Shared/UIManager/IRootView.cs
index d441bac6ae6..348b8c07ad1 100644
--- a/ReactWindows/ReactNative/UIManager/IRootView.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/IRootView.cs
@@ -1,4 +1,8 @@
-using Windows.UI.Xaml;
+#if WINDOWS_UWP
+using Windows.UI.Xaml;
+#else
+using System.Windows;
+#endif
namespace ReactNative.UIManager
{
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/AnimatedPropertyType.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/AnimatedPropertyType.cs
similarity index 100%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/AnimatedPropertyType.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/AnimatedPropertyType.cs
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/BaseLayoutAnimation.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/BaseLayoutAnimation.cs
similarity index 93%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/BaseLayoutAnimation.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/BaseLayoutAnimation.cs
index 72c42d2b072..38cd92693df 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/BaseLayoutAnimation.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/BaseLayoutAnimation.cs
@@ -1,7 +1,12 @@
using System;
using System.Reactive;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media.Animation;
+#else
+using System.Windows;
+using System.Windows.Media.Animation;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
@@ -77,7 +82,11 @@ private Timeline CreateOpacityAnimation(FrameworkElement view, double from, doub
};
Storyboard.SetTarget(timeline, view);
+#if WINDOWS_UWP
Storyboard.SetTargetProperty(timeline, "Opacity");
+#else
+ Storyboard.SetTargetProperty(timeline, new PropertyPath("Opacity"));
+#endif
return timeline;
}
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/InterpolationType.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/InterpolationType.cs
similarity index 100%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/InterpolationType.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/InterpolationType.cs
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs
similarity index 96%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs
index bd039626e21..5a73e10ccc9 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/InterpolationTypeExtensions.cs
@@ -1,6 +1,10 @@
using Newtonsoft.Json.Linq;
using System;
+#if WINDOWS_UWP
using Windows.UI.Xaml.Media.Animation;
+#else
+using System.Windows.Media.Animation;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimation.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimation.cs
similarity index 97%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimation.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimation.cs
index ef2ed4759bf..a71e865b093 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimation.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimation.cs
@@ -3,8 +3,13 @@
using ReactNative.Reflection;
using System;
using System.Reactive;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media.Animation;
+#else
+using System.Windows;
+using System.Windows.Media.Animation;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimationController.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimationController.cs
similarity index 98%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimationController.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimationController.cs
index 9061215d528..bf8f3b17f0a 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutAnimationController.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutAnimationController.cs
@@ -5,8 +5,13 @@
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Runtime.CompilerServices;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
+#else
+using System.Windows;
+using System.Windows.Controls;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutCreateAnimation.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutCreateAnimation.cs
similarity index 95%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutCreateAnimation.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutCreateAnimation.cs
index 52a0123a190..ed512501b69 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutCreateAnimation.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutCreateAnimation.cs
@@ -1,8 +1,13 @@
using System;
using System.Reactive;
using System.Reactive.Linq;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
+#else
+using System.Windows;
+using System.Windows.Controls;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutDeleteAnimation.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutDeleteAnimation.cs
similarity index 100%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutDeleteAnimation.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutDeleteAnimation.cs
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs
similarity index 92%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs
index 5d7706b2e1e..e92f01cf50d 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/LayoutUpdateAnimation.cs
@@ -1,8 +1,14 @@
using System;
using System.Reactive;
+#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Animation;
+#else
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media.Animation;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
@@ -62,14 +68,18 @@ protected override IObservable CreateAnimationCore(FrameworkElement view,
if (currentWidth != dimensions.Width)
{
var timeline = CreateTimeline(view, "Width", currentWidth, dimensions.Width);
+#if WINDOWS_UWP
timeline.EnableDependentAnimation = true;
+#endif
storyboard.Children.Add(timeline);
}
if (currentHeight != dimensions.Height)
{
var timeline = CreateTimeline(view, "Height", currentHeight, dimensions.Height);
+#if WINDOWS_UWP
timeline.EnableDependentAnimation = true;
+#endif
storyboard.Children.Add(timeline);
}
@@ -94,7 +104,11 @@ private DoubleAnimation CreateTimeline(FrameworkElement view, string path, doubl
};
Storyboard.SetTarget(timeline, view);
+#if WINDOWS_UWP
Storyboard.SetTargetProperty(timeline, path);
+#else
+ Storyboard.SetTargetProperty(timeline, new PropertyPath(path));
+#endif
return timeline;
}
diff --git a/ReactWindows/ReactNative/UIManager/LayoutAnimation/StoryboardObservable.cs b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/StoryboardObservable.cs
similarity index 84%
rename from ReactWindows/ReactNative/UIManager/LayoutAnimation/StoryboardObservable.cs
rename to ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/StoryboardObservable.cs
index f2e2afa71ab..bc25a6a60f3 100644
--- a/ReactWindows/ReactNative/UIManager/LayoutAnimation/StoryboardObservable.cs
+++ b/ReactWindows/ReactNative.Shared/UIManager/LayoutAnimation/StoryboardObservable.cs
@@ -1,7 +1,11 @@
using System;
using System.Reactive;
using System.Reactive.Linq;
+#if WINDOWS_UWP
using Windows.UI.Xaml.Media.Animation;
+#else
+using System.Windows.Media.Animation;
+#endif
namespace ReactNative.UIManager.LayoutAnimation
{
@@ -26,8 +30,13 @@ public IDisposable Subscribe(IObserver observer)
_storyboard.Begin();
return Observable.FromEventPattern