react-native-windows 0.0.0-canary.708 → 0.0.0-canary.709

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/Microsoft.ReactNative/CompositionContext.idl +31 -8
  2. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +494 -182
  3. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +37 -5
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +48 -9
  5. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +34 -8
  6. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +3 -2
  7. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +16 -17
  8. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.cpp +1 -2
  9. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +3 -4
  10. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +2 -0
  11. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +121 -44
  12. package/PropertySheets/External/Microsoft.ReactNative.Composition.Common.props +12 -0
  13. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppApp.props +24 -0
  14. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppApp.targets +20 -0
  15. package/PropertySheets/External/Microsoft.ReactNative.Composition.Package.props +14 -0
  16. package/PropertySheets/External/Microsoft.ReactNative.Composition.Package.targets +18 -0
  17. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +1 -1
  18. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  19. package/package.json +2 -2
  20. package/templates/cpp-app/metro.config.js +51 -0
  21. package/templates/cpp-app/template.config.js +118 -0
  22. package/templates/cpp-app/windows/ExperimentalFeatures.props +12 -0
  23. package/templates/cpp-app/windows/MyApp/MyApp.cpp +284 -0
  24. package/templates/cpp-app/windows/MyApp/MyApp.h +3 -0
  25. package/templates/cpp-app/windows/MyApp/MyApp.ico +0 -0
  26. package/templates/cpp-app/windows/MyApp/MyApp.rc +0 -0
  27. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +142 -0
  28. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj.filters +55 -0
  29. package/templates/cpp-app/windows/MyApp/_gitignore +1 -0
  30. package/templates/cpp-app/windows/MyApp/pch.cpp +1 -0
  31. package/templates/cpp-app/windows/MyApp/pch.h +35 -0
  32. package/templates/cpp-app/windows/MyApp/resource.h +18 -0
  33. package/templates/cpp-app/windows/MyApp/small.ico +0 -0
  34. package/templates/cpp-app/windows/MyApp/targetver.h +8 -0
  35. package/templates/cpp-app/windows/MyApp.Package/Images/LockScreenLogo.scale-200.png +0 -0
  36. package/templates/cpp-app/windows/MyApp.Package/Images/SplashScreen.scale-200.png +0 -0
  37. package/templates/cpp-app/windows/MyApp.Package/Images/Square150x150Logo.scale-200.png +0 -0
  38. package/templates/cpp-app/windows/MyApp.Package/Images/Square44x44Logo.scale-200.png +0 -0
  39. package/templates/cpp-app/windows/MyApp.Package/Images/Square44x44Logo.targetsize-24_altform-unplated.png +0 -0
  40. package/templates/cpp-app/windows/MyApp.Package/Images/StoreLogo.png +0 -0
  41. package/templates/cpp-app/windows/MyApp.Package/Images/Wide310x150Logo.scale-200.png +0 -0
  42. package/templates/cpp-app/windows/MyApp.Package/MyApp.Package.wapproj +78 -0
  43. package/templates/cpp-app/windows/MyApp.Package/Package.appxmanifest +49 -0
  44. package/templates/cpp-app/windows/MyApp.sln +176 -0
  45. package/templates/cpp-app/windows/_gitignore +41 -0
@@ -2,17 +2,28 @@
2
2
  // Licensed under the MIT License.
3
3
  #pragma once
4
4
 
5
- #include "Composition.CompositionContextHelper.g.h"
5
+ #ifdef USE_WINUI3
6
+ #include "Composition.MicrosoftCompositionContextHelper.g.h"
7
+ #endif
8
+ #include "Composition.WindowsCompositionContextHelper.g.h"
6
9
 
7
10
  #include <d2d1_1.h>
8
11
  #include <windows.ui.composition.interop.h>
9
12
  #include <winrt/Windows.UI.Composition.h>
10
13
  #include "CompositionHelpers.h"
11
14
 
15
+ namespace winrt::Microsoft::ReactNative::Composition {
16
+ #ifdef USE_WINUI3
17
+ using CompositionContextHelper = MicrosoftCompositionContextHelper;
18
+ #else
19
+ using CompositionContextHelper = WindowsCompositionContextHelper;
20
+ #endif
21
+ } // namespace winrt::Microsoft::ReactNative::Composition
22
+
12
23
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
13
24
 
14
- struct CompositionContextHelper : CompositionContextHelperT<CompositionContextHelper> {
15
- CompositionContextHelper() = default;
25
+ struct WindowsCompositionContextHelper : WindowsCompositionContextHelperT<WindowsCompositionContextHelper> {
26
+ WindowsCompositionContextHelper() = default;
16
27
 
17
28
  static ICompositionContext CreateContext(winrt::Windows::UI::Composition::Compositor const &compositor) noexcept;
18
29
  static IVisual CreateVisual(winrt::Windows::UI::Composition::Visual const &visual) noexcept;
@@ -23,11 +34,32 @@ struct CompositionContextHelper : CompositionContextHelperT<CompositionContextHe
23
34
  static winrt::Windows::UI::Composition::ICompositionSurface InnerSurface(IDrawingSurfaceBrush surface) noexcept;
24
35
  };
25
36
 
37
+ #ifdef USE_WINUI3
38
+ struct MicrosoftCompositionContextHelper : MicrosoftCompositionContextHelperT<MicrosoftCompositionContextHelper> {
39
+ MicrosoftCompositionContextHelper() = default;
40
+
41
+ static ICompositionContext CreateContext(winrt::Microsoft::UI::Composition::Compositor const &compositor) noexcept;
42
+ static IVisual CreateVisual(winrt::Microsoft::UI::Composition::Visual const &visual) noexcept;
43
+ static winrt::Microsoft::UI::Composition::Compositor InnerCompositor(ICompositionContext context) noexcept;
44
+ static winrt::Microsoft::UI::Composition::Visual InnerVisual(IVisual visual) noexcept;
45
+ static winrt::Microsoft::UI::Composition::DropShadow InnerDropShadow(IDropShadow shadow) noexcept;
46
+ static winrt::Microsoft::UI::Composition::CompositionBrush InnerBrush(IBrush brush) noexcept;
47
+ static winrt::Microsoft::UI::Composition::ICompositionSurface InnerSurface(IDrawingSurfaceBrush surface) noexcept;
48
+ };
49
+ #endif
50
+
26
51
  } // namespace winrt::Microsoft::ReactNative::Composition::implementation
27
52
 
28
53
  namespace winrt::Microsoft::ReactNative::Composition::factory_implementation {
29
54
 
30
- struct CompositionContextHelper
31
- : CompositionContextHelperT<CompositionContextHelper, implementation::CompositionContextHelper> {};
55
+ struct WindowsCompositionContextHelper : WindowsCompositionContextHelperT<
56
+ WindowsCompositionContextHelper,
57
+ implementation::WindowsCompositionContextHelper> {};
58
+
59
+ #ifdef USE_WINUI3
60
+ struct MicrosoftCompositionContextHelper : MicrosoftCompositionContextHelperT<
61
+ MicrosoftCompositionContextHelper,
62
+ implementation::MicrosoftCompositionContextHelper> {};
63
+ #endif
32
64
 
33
65
  } // namespace winrt::Microsoft::ReactNative::Composition::factory_implementation
@@ -1,40 +1,79 @@
1
1
 
2
2
  #include "pch.h"
3
3
  #include "CompositionContextHelper.h"
4
- #if __has_include("Composition.CompositionContextHelper.g.cpp")
5
- #include "Composition.CompositionContextHelper.g.cpp"
4
+ #if __has_include("Composition.WindowsCompositionContextHelper.g.cpp")
5
+ #include "Composition.WindowsCompositionContextHelper.g.cpp"
6
+ #endif
7
+ #ifdef USE_WINUI3
8
+ #if __has_include("Composition.MicrosoftCompositionContextHelper.g.cpp")
9
+ #include "Composition.MicrosoftCompositionContextHelper.g.cpp"
10
+ #endif
6
11
  #endif
7
12
 
8
13
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
9
14
 
10
- ICompositionContext CompositionContextHelper::CreateContext(
15
+ ICompositionContext WindowsCompositionContextHelper::CreateContext(
16
+ winrt::Windows::UI::Composition::Compositor const &) noexcept {
17
+ return nullptr;
18
+ }
19
+
20
+ IVisual WindowsCompositionContextHelper::CreateVisual(winrt::Windows::UI::Composition::Visual const &) noexcept {
21
+ return nullptr;
22
+ }
23
+
24
+ winrt::Windows::UI::Composition::Compositor WindowsCompositionContextHelper::InnerCompositor(
25
+ ICompositionContext) noexcept {
26
+ return nullptr;
27
+ }
28
+
29
+ winrt::Windows::UI::Composition::Visual WindowsCompositionContextHelper::InnerVisual(IVisual) noexcept {
30
+ return nullptr;
31
+ }
32
+
33
+ winrt::Windows::UI::Composition::DropShadow WindowsCompositionContextHelper::InnerDropShadow(IDropShadow) noexcept {
34
+ return nullptr;
35
+ }
36
+
37
+ winrt::Windows::UI::Composition::CompositionBrush WindowsCompositionContextHelper::InnerBrush(IBrush) noexcept {
38
+ return nullptr;
39
+ }
40
+
41
+ winrt::Windows::UI::Composition::ICompositionSurface WindowsCompositionContextHelper::InnerSurface(
42
+ IDrawingSurfaceBrush) noexcept {
43
+ return nullptr;
44
+ }
45
+
46
+ #ifdef USE_WINUI3
47
+ ICompositionContext MicrosoftCompositionContextHelper::CreateContext(
11
48
  winrt::Windows::UI::Composition::Compositor const &) noexcept {
12
49
  return nullptr;
13
50
  }
14
51
 
15
- IVisual CompositionContextHelper::CreateVisual(winrt::Windows::UI::Composition::Visual const &) noexcept {
52
+ IVisual MicrosoftCompositionContextHelper::CreateVisual(winrt::Windows::UI::Composition::Visual const &) noexcept {
16
53
  return nullptr;
17
54
  }
18
55
 
19
- winrt::Windows::UI::Composition::Compositor CompositionContextHelper::InnerCompositor(ICompositionContext) noexcept {
56
+ winrt::Windows::UI::Composition::Compositor MicrosoftCompositionContextHelper::InnerCompositor(
57
+ ICompositionContext) noexcept {
20
58
  return nullptr;
21
59
  }
22
60
 
23
- winrt::Windows::UI::Composition::Visual CompositionContextHelper::InnerVisual(IVisual) noexcept {
61
+ winrt::Windows::UI::Composition::Visual MicrosoftCompositionContextHelper::InnerVisual(IVisual) noexcept {
24
62
  return nullptr;
25
63
  }
26
64
 
27
- winrt::Windows::UI::Composition::DropShadow CompositionContextHelper::InnerDropShadow(IDropShadow) noexcept {
65
+ winrt::Windows::UI::Composition::DropShadow MicrosoftCompositionContextHelper::InnerDropShadow(IDropShadow) noexcept {
28
66
  return nullptr;
29
67
  }
30
68
 
31
- winrt::Windows::UI::Composition::CompositionBrush CompositionContextHelper::InnerBrush(IBrush) noexcept {
69
+ winrt::Windows::UI::Composition::CompositionBrush MicrosoftCompositionContextHelper::InnerBrush(IBrush) noexcept {
32
70
  return nullptr;
33
71
  }
34
72
 
35
- winrt::Windows::UI::Composition::ICompositionSurface CompositionContextHelper::InnerSurface(
73
+ winrt::Windows::UI::Composition::ICompositionSurface MicrosoftCompositionContextHelper::InnerSurface(
36
74
  IDrawingSurfaceBrush) noexcept {
37
75
  return nullptr;
38
76
  }
77
+ #endif
39
78
 
40
79
  } // namespace winrt::Microsoft::ReactNative::Composition::implementation
@@ -12,29 +12,55 @@ namespace Microsoft::ReactNative {
12
12
  namespace Composition {
13
13
 
14
14
  // Windows composition specific interface to extract the inner composition object
15
- MSO_STRUCT_GUID(ICompositionVisual, "2F7F7E82-0BEA-4Cf8-9531-E81338754187")
16
- struct ICompositionVisual : public IUnknown {
15
+ MSO_STRUCT_GUID(IWindowsCompositionVisual, "2F7F7E82-0BEA-4Cf8-9531-E81338754187")
16
+ struct IWindowsCompositionVisual : public IUnknown {
17
17
  virtual winrt::Windows::UI::Composition::Visual InnerVisual() const noexcept = 0;
18
18
  };
19
19
 
20
20
  // Windows composition specific interface to extract the inner composition shadow object
21
- MSO_STRUCT_GUID(ICompositionDropShadow, "C6474C79-B99A-4312-8FE6-7BC0C9594E5C")
22
- struct ICompositionDropShadow : public IUnknown {
21
+ MSO_STRUCT_GUID(IWindowsCompositionDropShadow, "C6474C79-B99A-4312-8FE6-7BC0C9594E5C")
22
+ struct IWindowsCompositionDropShadow : public IUnknown {
23
23
  virtual winrt::Windows::UI::Composition::DropShadow InnerShadow() const noexcept = 0;
24
24
  };
25
25
 
26
26
  // Windows composition specific interface to extract the inner composition brush object
27
- MSO_STRUCT_GUID(ICompositionBrush, "CFD63CA2-856E-4D5D-B2E2-68B982407051")
28
- struct ICompositionBrush : public IUnknown {
27
+ MSO_STRUCT_GUID(IWindowsCompositionBrush, "CFD63CA2-856E-4D5D-B2E2-68B982407051")
28
+ struct IWindowsCompositionBrush : public IUnknown {
29
29
  virtual winrt::Windows::UI::Composition::CompositionBrush InnerBrush() const noexcept = 0;
30
30
  };
31
31
 
32
32
  // Windows composition specific interface to extract the drawing surface object
33
- MSO_STRUCT_GUID(ICompositionDrawingSurfaceInner, "985963C3-1133-43CA-BAD2-AC4C893C3A1F")
34
- struct ICompositionDrawingSurfaceInner : public IUnknown {
33
+ MSO_STRUCT_GUID(IWindowsCompositionDrawingSurfaceInner, "985963C3-1133-43CA-BAD2-AC4C893C3A1F")
34
+ struct IWindowsCompositionDrawingSurfaceInner : public IUnknown {
35
35
  virtual winrt::Windows::UI::Composition::ICompositionSurface Inner() const noexcept = 0;
36
36
  };
37
37
 
38
+ #ifdef USE_WINUI3
39
+ // Microsoft composition specific interface to extract the inner composition object
40
+ MSO_STRUCT_GUID(IMicrosoftCompositionVisual, "FF8731D8-8AFA-4F6F-9E76-7F538F3C1157")
41
+ struct IMicrosoftCompositionVisual : public IUnknown {
42
+ virtual winrt::Microsoft::UI::Composition::Visual InnerVisual() const noexcept = 0;
43
+ };
44
+
45
+ // Microsoft composition specific interface to extract the inner composition shadow object
46
+ MSO_STRUCT_GUID(IMicrosoftCompositionDropShadow, "78E94CC1-8E8A-4CF7-9301-23305FFC97A2")
47
+ struct IMicrosoftCompositionDropShadow : public IUnknown {
48
+ virtual winrt::Microsoft::UI::Composition::DropShadow InnerShadow() const noexcept = 0;
49
+ };
50
+
51
+ // Microsoft composition specific interface to extract the inner composition brush object
52
+ MSO_STRUCT_GUID(IMicrosoftCompositionBrush, "831CA206-B777-4660-88BC-19EB78045E40")
53
+ struct IMicrosoftCompositionBrush : public IUnknown {
54
+ virtual winrt::Microsoft::UI::Composition::CompositionBrush InnerBrush() const noexcept = 0;
55
+ };
56
+
57
+ // Microsoft composition specific interface to extract the drawing surface object
58
+ MSO_STRUCT_GUID(IMicrosoftCompositionDrawingSurfaceInner, "4ADDC62F-51D0-4C71-8BE4-3256E628D07A")
59
+ struct IMicrosoftCompositionDrawingSurfaceInner : public IUnknown {
60
+ virtual winrt::Microsoft::UI::Composition::ICompositionSurface Inner() const noexcept = 0;
61
+ };
62
+ #endif
63
+
38
64
  } // namespace Composition
39
65
 
40
66
  bool CheckForDeviceRemoved(HRESULT hr);
@@ -61,7 +61,8 @@ void CompositionHwndHost::Initialize(uint64_t hwnd) noexcept {
61
61
 
62
62
  m_compRootView.ScaleFactor(ScaleFactor());
63
63
  m_compRootView.RootVisual(
64
- winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::CreateVisual(RootVisual()));
64
+ winrt::Microsoft::ReactNative::Composition::implementation::WindowsCompositionContextHelper::CreateVisual(
65
+ RootVisual()));
65
66
 
66
67
  UpdateSize();
67
68
  }
@@ -149,7 +150,7 @@ winrt::Windows::UI::Composition::Compositor CompositionHwndHost::Compositor() co
149
150
  winrt::Microsoft::ReactNative::Composition::implementation::CompositionUIService::GetCompositionContext(
150
151
  m_reactViewHost.ReactNativeHost().InstanceSettings().Properties());
151
152
 
152
- return winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerCompositor(
153
+ return winrt::Microsoft::ReactNative::Composition::implementation::WindowsCompositionContextHelper::InnerCompositor(
153
154
  compositionContext);
154
155
  }
155
156
 
@@ -1207,14 +1207,13 @@ CompositionBaseComponentView::supplementalComponentDescriptorProviders() noexcep
1207
1207
 
1208
1208
  comp::CompositionPropertySet CompositionBaseComponentView::EnsureCenterPointPropertySet() noexcept {
1209
1209
  if (m_centerPropSet == nullptr) {
1210
- auto compositor =
1211
- winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerCompositor(
1212
- m_compContext);
1213
-
1214
- m_centerPropSet = compositor.CreatePropertySet();
1215
- UpdateCenterPropertySet();
1216
- m_centerPropSet.InsertMatrix4x4(L"transform", winrt::Windows::Foundation::Numerics::float4x4::identity());
1217
- m_centerPropSet.InsertVector3(L"translation", {0, 0, 0});
1210
+ if (auto compositor =
1211
+ winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerCompositor(m_compContext)) {
1212
+ m_centerPropSet = compositor.CreatePropertySet();
1213
+ UpdateCenterPropertySet();
1214
+ m_centerPropSet.InsertMatrix4x4(L"transform", winrt::Windows::Foundation::Numerics::float4x4::identity());
1215
+ m_centerPropSet.InsertVector3(L"translation", {0, 0, 0});
1216
+ }
1218
1217
  }
1219
1218
 
1220
1219
  return m_centerPropSet;
@@ -1253,15 +1252,15 @@ void CompositionBaseComponentView::EnsureTransformMatrixFacade() noexcept {
1253
1252
  m_hasTransformMatrixFacade = true;
1254
1253
 
1255
1254
  auto centerPointPropSet = EnsureCenterPointPropertySet();
1256
- // TODO cache expression instead of creating new ones all the time
1257
- auto expression =
1258
- winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerCompositor(
1259
- m_compContext)
1260
- .CreateExpressionAnimation(
1261
- L"Matrix4x4.CreateFromScale(PS.dpiScale3Inv) * Matrix4x4.CreateFromTranslation(PS.translation) * PS.transform * Matrix4x4.CreateFromScale(PS.dpiScale3)");
1262
- expression.SetReferenceParameter(L"PS", centerPointPropSet);
1263
- winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerVisual(OuterVisual())
1264
- .StartAnimation(L"TransformMatrix", expression);
1255
+ if (auto compositor =
1256
+ winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerCompositor(m_compContext)) {
1257
+ // TODO cache expression instead of creating new ones all the time
1258
+ auto expression = compositor.CreateExpressionAnimation(
1259
+ L"Matrix4x4.CreateFromScale(PS.dpiScale3Inv) * Matrix4x4.CreateFromTranslation(PS.translation) * PS.transform * Matrix4x4.CreateFromScale(PS.dpiScale3)");
1260
+ expression.SetReferenceParameter(L"PS", centerPointPropSet);
1261
+ winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerVisual(OuterVisual())
1262
+ .StartAnimation(L"TransformMatrix", expression);
1263
+ }
1265
1264
  }
1266
1265
 
1267
1266
  facebook::react::SharedViewEventEmitter CompositionBaseComponentView::eventEmitter() noexcept {
@@ -46,8 +46,7 @@ comp::Compositor NativeAnimatedNodeManager::Compositor() const noexcept {
46
46
  winrt::Microsoft::ReactNative::Composition::implementation::CompositionUIService::GetCompositionContext(
47
47
  m_context.Properties().Handle());
48
48
  if (compositionContext) {
49
- return winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerCompositor(
50
- compositionContext);
49
+ return winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerCompositor(compositionContext);
51
50
  }
52
51
  #endif
53
52
  #ifndef CORE_ABI
@@ -181,9 +181,8 @@ void PropsAnimatedNode::StartAnimations() {
181
181
  view.m_element.RotationAxis(m_rotationAxis);
182
182
  #ifdef USE_FABRIC
183
183
  } else {
184
- auto visual =
185
- winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerVisual(
186
- view.m_componentView->Visual());
184
+ auto visual = winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerVisual(
185
+ view.m_componentView->Visual());
187
186
  visual.RotationAxis(m_rotationAxis);
188
187
  #endif
189
188
  }
@@ -393,7 +392,7 @@ void PropsAnimatedNode::StartAnimation(
393
392
  view.m_element.StartAnimation(animation);
394
393
  #ifdef USE_FABRIC
395
394
  } else if (view.m_componentView) {
396
- auto visual = winrt::Microsoft::ReactNative::Composition::implementation::CompositionContextHelper::InnerVisual(
395
+ auto visual = winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerVisual(
397
396
  view.m_componentView->Visual());
398
397
  if (visual) {
399
398
  auto targetProp = animation.Target();
@@ -6,7 +6,9 @@
6
6
  #include <DesktopWindowBridge.h>
7
7
  #include <IReactDispatcher.h>
8
8
  #include <IReactPropertyBag.h>
9
+ #ifndef USE_WINUI3
9
10
  #include <UI.Xaml.Hosting.DesktopWindowXamlSource.h>
11
+ #endif
10
12
  #include <Utils/Helpers.h>
11
13
  #include <XamlUIService.h>
12
14
  #include <XamlUtils.h>