Skip to content

Fix XAML popup positioning and light dismiss in ScrollView (#15557)#15564

Merged
Nitin-100 merged 25 commits intomicrosoft:mainfrom
Nitin-100:nitinc/fix-xaml-popup-positioning-15557
Feb 13, 2026
Merged

Fix XAML popup positioning and light dismiss in ScrollView (#15557)#15564
Nitin-100 merged 25 commits intomicrosoft:mainfrom
Nitin-100:nitinc/fix-xaml-popup-positioning-15557

Conversation

@Nitin-100
Copy link
Contributor

@Nitin-100 Nitin-100 commented Jan 21, 2026

Fix XAML popup positioning and light dismiss in ScrollView (#15557)

Description

This PR fixes Issue #15557 - "Pop-ups of Xaml controls need positioning and dismissal"

When XAML controls with popups (like ComboBox, DatePicker, TimePicker) are hosted inside a React Native ScrollView via ContentIslandComponentView, two bugs occur:

  1. Bug 1 (Position): After scrolling, opening the popup shows it at the wrong position (offset by the scroll amount)
  2. Bug 2 (Light Dismiss): Opening a popup and then scrolling leaves the popup floating at its original position instead of dismissing

Root Cause Analysis

Bug 1: Popup Position

  • ContentIslandComponentView uses ChildSiteLink.LocalToParentTransformMatrix for popup positioning
  • Issue 1: getClientRect() returns values in physical pixels (scaled by pointScaleFactor), but LocalToParentTransformMatrix expects logical pixels (DIPs)
  • Issue 2: Transform was updated asynchronously via UIDispatcher().Post(), causing race conditions where popup opened with stale transform values
  • Issue 3: Initial transform wasn't set before Connect(), causing wrong position even without scrolling

Bug 2: Light Dismiss on Scroll

  • XAML's native light dismiss behavior wasn't being triggered when scroll begins in React Native

Solution

Bug 1 Fix: Popup Position After Scroll

  1. Convert to DIPs: Divide getClientRect() values by pointScaleFactor before setting LocalToParentTransformMatrix
  2. Synchronous updates: Remove async UIDispatcher().Post() wrapper - update transform immediately
  3. Initial transform: Set LocalToParentTransformMatrix in OnMounted() before Connect()
  4. Scroll notification: ScrollViewComponentView fires LayoutMetricsChanged event when scroll position changes

Bug 2 Fix: Light Dismiss on Scroll (Optimized)

  • Added DismissPopupsRequest event to ContentIslandComponentView
  • Added ScrollBeginDrag event to ScrollViewComponentView
  • Optimized registration: During OnMounted(), ContentIslandComponentView walks up the tree once and registers for ScrollBeginDrag on all parent ScrollViewComponentView instances
  • When scroll begins, ScrollViewComponentView fires its ScrollBeginDrag event, which notifies only the registered ContentIslandComponentView instances
  • No tree walking on every scroll - registration happens once during mount
  • 3rd party XAML components subscribe to DismissPopupsRequest and dismiss their own popups
  • Core remains XAML-agnostic - no XAML-specific code in the framework

Files Changed

Core Fix (vnext/Microsoft.ReactNative/)

  • Fabric/Composition/ContentIslandComponentView.cpp - DIP conversion, sync updates, register for parent ScrollView events during mount
  • Fabric/Composition/ContentIslandComponentView.h - Store scroll subscriptions
  • Fabric/Composition/ScrollViewComponentView.cpp - Fire LayoutMetricsChanged on scroll, expose ScrollBeginDrag event
  • Fabric/Composition/ScrollViewComponentView.h - ScrollBeginDrag event
  • CompositionComponentView.idl - Added DismissPopupsRequest event to ContentIslandComponentView, ScrollBeginDrag event to ScrollViewComponentView

Testing

  1. Run the XamlPopupRepro sample in Playground
  2. Scroll down in the ScrollView
  3. Click a ComboBox to open dropdown - should appear at correct position (right at the button)
  4. Open a ComboBox dropdown, then scroll - dropdown should close automatically

##Screenshot

testingFix.mp4

…#15557)

- Add SetXamlRoot() API on ContentIslandComponentView for 3rd party XAML components
- Add DismissPopups() using VisualTreeHelper.GetOpenPopupsForXamlRoot()
- Fire LayoutMetricsChanged on scroll to update popup positions
- Dismiss child ContentIsland popups when scroll begins
- Add ComboBox sample component demonstrating the pattern
- Add xamlPopupBug test sample for playground-composition
@Nitin-100 Nitin-100 requested review from a team as code owners January 21, 2026 07:49
Copy link
Contributor

@sundaramramaswamy sundaramramaswamy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address comments.

@microsoft-github-policy-service microsoft-github-policy-service bot added the Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) label Jan 23, 2026
…#15557)

- Set LocalToParentTransformMatrix synchronously before Connect() to fix initial position
- Fire LayoutMetricsChanged on scroll to update position after scrolling
- Add DismissPopupsRequest event for 3P components to implement light dismiss
- Update ComboBox sample to use event-based approach (core remains XAML-agnostic)
@microsoft-github-policy-service microsoft-github-policy-service bot removed the Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) label Jan 25, 2026
Nitin Chaudhary and others added 3 commits January 25, 2026 19:08
Issue microsoft#15557: Fix popup positioning for XAML controls in ScrollView

Bug 1 (Position Fix):
- Convert getClientRect() physical pixels to DIPs by dividing by pointScaleFactor
- LocalToParentTransformMatrix expects logical pixels (DIPs), not physical pixels
- Update transform synchronously instead of async to avoid race conditions
- Set initial transform in OnMounted() before Connect()

Bug 2 (Light Dismiss Fix):
- Add DismissPopupsRequest event for 3P components to handle popup dismissal
- ScrollView fires event when scroll begins via DismissChildContentIslandPopups()
- Core remains XAML-agnostic - 3P components handle their own popups
@Nitin-100 Nitin-100 self-assigned this Jan 27, 2026
Copy link
Contributor

@sundaramramaswamy sundaramramaswamy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert formatting changes.

@microsoft-github-policy-service microsoft-github-policy-service bot added the Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) label Jan 27, 2026
@microsoft-github-policy-service microsoft-github-policy-service bot removed the Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) label Jan 27, 2026
@Nitin-100 Nitin-100 force-pushed the nitinc/fix-xaml-popup-positioning-15557 branch from f0d7eb5 to e8cfe99 Compare January 27, 2026 14:27
@acoates-ms
Copy link
Contributor

acoates-ms commented Jan 27, 2026

Assuming LocalToParentTransformMatrix is pretty cheap, the LocalToParentTransformMatrix changes look good.

The light dismiss logic seems more wrong. This looks like we need additional hosting APIs from ContentIslands. ContentIslands should provide APIs to handle this kind of communication, and Xaml / RNW should talk to the new API. Xaml content islands should not have to know about RNW APIs - it breaks the ContentIsland encapsulation.

@Nitin-100 Nitin-100 requested a review from a team January 28, 2026 17:40
@Nitin-100
Copy link
Contributor Author

@acoates-ms I have addressed all comments, please review it.

ssuraj2504 and others added 3 commits January 31, 2026 12:31
* docs: fix broken markdown links

* Address reviewer feedback

* Remove obsolete docs and clean conflict markers

* Delete managedCodeGen.md

---------

Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>
* Use automationoption as frameworkbased for childsite

* Change files

* remove tokens associated with fragment based
@Nitin-100
Copy link
Contributor Author

Assuming LocalToParentTransformMatrix is pretty cheap, the LocalToParentTransformMatrix changes look good.

The light dismiss logic seems more wrong. This looks like we need additional hosting APIs from ContentIslands. ContentIslands should provide APIs to handle this kind of communication, and Xaml / RNW should talk to the new API. Xaml content islands should not have to know about RNW APIs - it breaks the ContentIsland encapsulation.

LocalToParentTransformMatrix: Yes, it's a cheap call - just sets a 4x4 matrix value. Confirmed working correctly.

Light dismiss architecture: I agree this isn't ideal from an encapsulation perspective. I've implemented an event-based approach that keeps RNW core XAML-agnostic:

  1. ScrollViewComponentView exposes a ScrollBeginDrag event
  2. ContentIslandComponentView registers with parent ScrollViews during mount (one-time tree walk)
  3. ContentIslandComponentView exposes DismissPopupsRequest event for 3rd party components
  4. No tree walking on every scroll - efficient O(listeners) per scroll

The 3rd party XAML component subscribes to DismissPopupsRequest and handles its own popup dismissal. RNW core doesn't call any XAML APIs directly.

You're right that ideally ContentIsland platform should provide this natively - perhaps via InputLightDismissAction or a new scroll-aware light dismiss API. Should I file a follow-up issue to track this request for the ContentIsland team?

For now, this workaround unblocks the immediate customer scenario while maintaining XAML-agnostic core code.

@Nitin-100 Nitin-100 force-pushed the nitinc/fix-xaml-popup-positioning-15557 branch from 505103b to db01f95 Compare February 3, 2026 15:26
@microsoft-github-policy-service microsoft-github-policy-service bot added Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) and removed Needs: Author Feedback The issue/PR needs activity from its author (label drives bot activity) labels Feb 3, 2026
Nitin-100 and others added 6 commits February 4, 2026 06:26
…ent, move light dismiss to 3P component

Addresses acoates-ms review comments:
1. Replace FireLayoutMetricsChangedForScrollPositionChange with proper ViewChanged
   event on ScrollViewComponentView (similar to XAML ScrollViewer.ViewChanged)
2. Remove DismissPopupsRequest from ContentIslandComponentView - light dismiss
   logic moved to ComboBoxComponentView which walks parent tree on mount
3. ContentIslandComponentView subscribes to ViewChanged for transform updates
4. 3P component (ComboBox) subscribes to ViewChanged for popup dismiss
@Nitin-100 Nitin-100 merged commit 6fbe27b into microsoft:main Feb 13, 2026
30 checks passed
Nitin-100 added a commit to Nitin-100/react-native-windows that referenced this pull request Feb 13, 2026
…#15557) (microsoft#15564)

* Fix XAML popup positioning and light dismiss in ScrollView (microsoft#15557)

- Add SetXamlRoot() API on ContentIslandComponentView for 3rd party XAML components
- Add DismissPopups() using VisualTreeHelper.GetOpenPopupsForXamlRoot()
- Fire LayoutMetricsChanged on scroll to update popup positions
- Dismiss child ContentIsland popups when scroll begins
- Add ComboBox sample component demonstrating the pattern
- Add xamlPopupBug test sample for playground-composition

* Change files

* Fix XAML popup positioning and light dismiss in ScrollView (microsoft#15557)

- Set LocalToParentTransformMatrix synchronously before Connect() to fix initial position
- Fire LayoutMetricsChanged on scroll to update position after scrolling
- Add DismissPopupsRequest event for 3P components to implement light dismiss
- Update ComboBox sample to use event-based approach (core remains XAML-agnostic)

* Fix XAML popup positioning - convert to DIPs and update synchronously

Issue microsoft#15557: Fix popup positioning for XAML controls in ScrollView

Bug 1 (Position Fix):
- Convert getClientRect() physical pixels to DIPs by dividing by pointScaleFactor
- LocalToParentTransformMatrix expects logical pixels (DIPs), not physical pixels
- Update transform synchronously instead of async to avoid race conditions
- Set initial transform in OnMounted() before Connect()

Bug 2 (Light Dismiss Fix):
- Add DismissPopupsRequest event for 3P components to handle popup dismissal
- ScrollView fires event when scroll begins via DismissChildContentIslandPopups()
- Core remains XAML-agnostic - 3P components handle their own popups

* Apply clang-format

* Revert IDL formatting, keep only DismissPopupsRequest event

* Change files

* Optimize light dismiss: register during mount instead of tree walk on scroll

* docs: fix broken markdown links in pipeline (microsoft#15594)

* docs: fix broken markdown links

* Address reviewer feedback

* Remove obsolete docs and clean conflict markers

* Delete managedCodeGen.md

---------

Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>

* Bring Narrator focus to XAML island (microsoft#15611)

* Use automationoption as frameworkbased for childsite

* Change files

* remove tokens associated with fragment based

* Fix IDL: only add events without formatting changes

* Address review: replace fake LayoutMetricsChanged with ViewChanged event, move light dismiss to 3P component

Addresses acoates-ms review comments:
1. Replace FireLayoutMetricsChangedForScrollPositionChange with proper ViewChanged
   event on ScrollViewComponentView (similar to XAML ScrollViewer.ViewChanged)
2. Remove DismissPopupsRequest from ContentIslandComponentView - light dismiss
   logic moved to ComboBoxComponentView which walks parent tree on mount
3. ContentIslandComponentView subscribes to ViewChanged for transform updates
4. 3P component (ComboBox) subscribes to ViewChanged for popup dismiss

* Apply formatting fixes and add ComboBox codegen

* Fix syntax error: use correct codegen type ComboBoxEventEmitter::OnSelectionChanged

---------

Co-authored-by: Nitin Chaudhary <nitchaudhary@microsoft.com>
Co-authored-by: Suraj Raykar <168889106+ssuraj2504@users.noreply.github.com>
Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>
Nitin-100 added a commit to Nitin-100/react-native-windows that referenced this pull request Feb 13, 2026
…#15557) (microsoft#15564)

* Fix XAML popup positioning and light dismiss in ScrollView (microsoft#15557)

- Add SetXamlRoot() API on ContentIslandComponentView for 3rd party XAML components
- Add DismissPopups() using VisualTreeHelper.GetOpenPopupsForXamlRoot()
- Fire LayoutMetricsChanged on scroll to update popup positions
- Dismiss child ContentIsland popups when scroll begins
- Add ComboBox sample component demonstrating the pattern
- Add xamlPopupBug test sample for playground-composition

* Change files

* Fix XAML popup positioning and light dismiss in ScrollView (microsoft#15557)

- Set LocalToParentTransformMatrix synchronously before Connect() to fix initial position
- Fire LayoutMetricsChanged on scroll to update position after scrolling
- Add DismissPopupsRequest event for 3P components to implement light dismiss
- Update ComboBox sample to use event-based approach (core remains XAML-agnostic)

* Fix XAML popup positioning - convert to DIPs and update synchronously

Issue microsoft#15557: Fix popup positioning for XAML controls in ScrollView

Bug 1 (Position Fix):
- Convert getClientRect() physical pixels to DIPs by dividing by pointScaleFactor
- LocalToParentTransformMatrix expects logical pixels (DIPs), not physical pixels
- Update transform synchronously instead of async to avoid race conditions
- Set initial transform in OnMounted() before Connect()

Bug 2 (Light Dismiss Fix):
- Add DismissPopupsRequest event for 3P components to handle popup dismissal
- ScrollView fires event when scroll begins via DismissChildContentIslandPopups()
- Core remains XAML-agnostic - 3P components handle their own popups

* Apply clang-format

* Revert IDL formatting, keep only DismissPopupsRequest event

* Change files

* Optimize light dismiss: register during mount instead of tree walk on scroll

* docs: fix broken markdown links in pipeline (microsoft#15594)

* docs: fix broken markdown links

* Address reviewer feedback

* Remove obsolete docs and clean conflict markers

* Delete managedCodeGen.md

---------

Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>

* Bring Narrator focus to XAML island (microsoft#15611)

* Use automationoption as frameworkbased for childsite

* Change files

* remove tokens associated with fragment based

* Fix IDL: only add events without formatting changes

* Address review: replace fake LayoutMetricsChanged with ViewChanged event, move light dismiss to 3P component

Addresses acoates-ms review comments:
1. Replace FireLayoutMetricsChangedForScrollPositionChange with proper ViewChanged
   event on ScrollViewComponentView (similar to XAML ScrollViewer.ViewChanged)
2. Remove DismissPopupsRequest from ContentIslandComponentView - light dismiss
   logic moved to ComboBoxComponentView which walks parent tree on mount
3. ContentIslandComponentView subscribes to ViewChanged for transform updates
4. 3P component (ComboBox) subscribes to ViewChanged for popup dismiss

* Apply formatting fixes and add ComboBox codegen

* Fix syntax error: use correct codegen type ComboBoxEventEmitter::OnSelectionChanged

---------

Co-authored-by: Nitin Chaudhary <nitchaudhary@microsoft.com>
Co-authored-by: Suraj Raykar <168889106+ssuraj2504@users.noreply.github.com>
Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>
iamAbhi-916 added a commit that referenced this pull request Feb 13, 2026
…557,15338 (#15663)

* Overflow implementation in Fabric as per Parity to Paper (#15338)

* Implement overflow property support for Fabric architecture

* Change files

* Subject: ETW Provider Registration - Route to Existing 1DS Aria Tenant

Hi OSG Instrumentation Team,

I'm working on React Native Windows telemetry. We currently have:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EXISTING (working):
- JavaScript CLI telemetry via 1DS SDK
- Instrumentation Key: 49ff6d3ef12f4578a7b75a2573d9dba8-026332b2-2d50-452f-ad0d-50f921c97a9d-7145
- Data flows to: Aria → Kusto
- Kusto cluster: [YOU NEED TO TELL ME THIS]

NEW (want to add):
- Native C++ telemetry via ETW/TraceLogging
- Provider Name: Microsoft.ReactNativeWindows.Telemetry
- Provider GUID: [WILL GENERATE]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

QUESTION:
Can you register the new ETW provider GUID and route it to the SAME
Aria tenant as our existing 1DS instrumentation key?

Goal: Have both JavaScript (1DS) and C++ (ETW) telemetry appear in
the same Kusto database for unified querying.

Is this possible? If yes, what info do you need from me?

Thanks,
Harini Malothu
React Native Windows Team

* Remove overflowTest.tsx - will attach separately in PR

* Address review comment: make variables const

* Ensure visual is created before accessing m_contentVisual

* Fix formatting issues

* Fix E2E crash: use try_as instead of as for IVisualInterop

* Implement overflow:hidden with lazy m_contentVisual creation

- Only create m_contentVisual when overflow:hidden is set (performance optimization)
- Reparent children when m_contentVisual is created/removed
- Use try_as instead of as for IVisualInterop to prevent crashes
- Properly handle border radii for clipping

* Fix crash: use try_as for IVisualInterop

* Implement overflow clipping with m_contentVisual and try_as fix

* Fix crash: use try_as in ComponentView::updateClippingPath

* Implement lazy m_contentVisual creation for memory efficiency

* Fix crash: skip m_contentVisual creation for custom builder visuals

* Add null check for m_visual in applyShadowProps to prevent crash

* Fix build: Use Visual() instead of m_visual in ComponentView::applyShadowProps

* Fix E2E crash: Remove assert in Visual() that crashes before initialization

* Fix E2E: Make m_contentVisual truly lazy - only create for overflow:hidden

- Remove ensureContentVisual() calls from VisualToMountChildrenInto() and MountChildComponentView()
- m_contentVisual is now only created in updateLayoutMetrics when getClipsContentToBounds() is true
- Add null check in onThemeChanged() before accessing Visual()
- Restore original ensureVisual() call in MountChildComponentView()

* feat: Implement overflow:hidden for Fabric using on-demand children container

Implement proper overflow:hidden clipping for the Fabric Composition renderer,
matching iOS/Android behavior. Instead of clipping m_visual directly (which
also clips borders and background), a dedicated m_childrenContainer visual is
created on-demand as a child of m_visual, and only children are clipped.

Visual Tree (with overflow:hidden):
  m_outerVisual
    m_visual (background, opacity, transform, border-radius clip)
      Border Visuals x N
      m_childrenContainer (created on demand, clipped to bounds)
        <children>

Key design decisions:
- m_childrenContainer is created lazily only when overflow:hidden is set
- Existing children are moved from m_visual into m_childrenContainer
- Once created, m_childrenContainer is never destroyed (clip is just removed
  if overflow changes back to visible)
- Clipping uses outer border radii via D2D path geometry, matching iOS
- ScrollView overrides updateChildrenClippingPath as no-op since it manages
  its own visual tree via m_scrollVisual and inherently clips content

Also cleans up:
- Removed unnecessary null-checks on Visual() (ensureVisual guarantees it)
- Removed shadow mask workaround code (not related to overflow)
- Removed InsetClip-based overflow handling from updateProps
- Added assert(m_visual) in Visual() accessor
- Simplified updateClippingPath to only handle border-radius clipping

* Move shadow to OuterVisual, use RelativeSizeWithOffset for children container

* lint,format fixes

* update e2e snapshots for overflow changes

* Revert "update e2e snapshots for overflow changes"

This reverts commit 5e07f75.

* update e2e snapshots for overflow changes

---------

Co-authored-by: Nitin Chaudhary <nitchaudhary@microsoft.com>
Co-authored-by: Abhijeet Jha <74712637+iamAbhi-916@users.noreply.github.com>

* Fix XAML popup positioning and light dismiss in ScrollView (#15557) (#15564)

* Fix XAML popup positioning and light dismiss in ScrollView (#15557)

- Add SetXamlRoot() API on ContentIslandComponentView for 3rd party XAML components
- Add DismissPopups() using VisualTreeHelper.GetOpenPopupsForXamlRoot()
- Fire LayoutMetricsChanged on scroll to update popup positions
- Dismiss child ContentIsland popups when scroll begins
- Add ComboBox sample component demonstrating the pattern
- Add xamlPopupBug test sample for playground-composition

* Change files

* Fix XAML popup positioning and light dismiss in ScrollView (#15557)

- Set LocalToParentTransformMatrix synchronously before Connect() to fix initial position
- Fire LayoutMetricsChanged on scroll to update position after scrolling
- Add DismissPopupsRequest event for 3P components to implement light dismiss
- Update ComboBox sample to use event-based approach (core remains XAML-agnostic)

* Fix XAML popup positioning - convert to DIPs and update synchronously

Issue #15557: Fix popup positioning for XAML controls in ScrollView

Bug 1 (Position Fix):
- Convert getClientRect() physical pixels to DIPs by dividing by pointScaleFactor
- LocalToParentTransformMatrix expects logical pixels (DIPs), not physical pixels
- Update transform synchronously instead of async to avoid race conditions
- Set initial transform in OnMounted() before Connect()

Bug 2 (Light Dismiss Fix):
- Add DismissPopupsRequest event for 3P components to handle popup dismissal
- ScrollView fires event when scroll begins via DismissChildContentIslandPopups()
- Core remains XAML-agnostic - 3P components handle their own popups

* Apply clang-format

* Revert IDL formatting, keep only DismissPopupsRequest event

* Change files

* Optimize light dismiss: register during mount instead of tree walk on scroll

* docs: fix broken markdown links in pipeline (#15594)

* docs: fix broken markdown links

* Address reviewer feedback

* Remove obsolete docs and clean conflict markers

* Delete managedCodeGen.md

---------

Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>

* Bring Narrator focus to XAML island (#15611)

* Use automationoption as frameworkbased for childsite

* Change files

* remove tokens associated with fragment based

* Fix IDL: only add events without formatting changes

* Address review: replace fake LayoutMetricsChanged with ViewChanged event, move light dismiss to 3P component

Addresses acoates-ms review comments:
1. Replace FireLayoutMetricsChangedForScrollPositionChange with proper ViewChanged
   event on ScrollViewComponentView (similar to XAML ScrollViewer.ViewChanged)
2. Remove DismissPopupsRequest from ContentIslandComponentView - light dismiss
   logic moved to ComboBoxComponentView which walks parent tree on mount
3. ContentIslandComponentView subscribes to ViewChanged for transform updates
4. 3P component (ComboBox) subscribes to ViewChanged for popup dismiss

* Apply formatting fixes and add ComboBox codegen

* Fix syntax error: use correct codegen type ComboBoxEventEmitter::OnSelectionChanged

---------

Co-authored-by: Nitin Chaudhary <nitchaudhary@microsoft.com>
Co-authored-by: Suraj Raykar <168889106+ssuraj2504@users.noreply.github.com>
Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>

* Apply clang-format

---------

Co-authored-by: Nitin Chaudhary <nitchaudhary@microsoft.com>
Co-authored-by: Abhijeet Jha <74712637+iamAbhi-916@users.noreply.github.com>
Co-authored-by: Suraj Raykar <168889106+ssuraj2504@users.noreply.github.com>
Co-authored-by: Protik Biswas <protikbiswas@microsoft.com>
Co-authored-by: Vineeth <66076509+vineethkuttan@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pop-ups of Xaml controls need positioning and dismissal

6 participants