33using Microsoft . UI . Xaml . Controls ;
44using Microsoft . UI . Xaml . Controls . Primitives ;
55using Microsoft . UI . Xaml . Data ;
6+ using Microsoft . UI . Xaml . Input ;
67using Microsoft . UI . Xaml . Media ;
78using Microsoft . UI . Xaml . Shapes ;
89using System ;
@@ -68,8 +69,7 @@ protected override void OnApplyTemplate()
6869
6970 if ( _detailsToggleButton is not null )
7071 {
71- _detailsToggleButton . Checked += OnDetailsToggleButtonChecked ;
72- _detailsToggleButton . Unchecked += OnDetailsToggleButtonUnChecked ;
72+ _detailsToggleButton . Tapped += OnDetailsToggleButtonTapped ;
7373 }
7474
7575 if ( _detailsPanel is not null )
@@ -190,11 +190,8 @@ internal void SetRowDetailsVisibility()
190190 }
191191 else if ( mode is TableViewRowDetailsVisibilityMode . VisibleWhenSelected )
192192 {
193- if ( _detailsToggleButton is not null )
194- _detailsToggleButton . IsChecked = TableViewRow ? . IsSelected ?? false ;
195- else
196- VisualStates . GoToState ( this , false , ( TableViewRow ? . IsSelected ?? false ) ? VisualStates . StateDetailsVisible : VisualStates . StateDetailsCollapsed ) ;
197-
193+ var state = ( TableViewRow ? . IsSelected ?? false ) ? VisualStates . StateDetailsVisible : VisualStates . StateDetailsCollapsed ;
194+ VisualStates . GoToState ( this , false , state ) ;
198195 VisualStates . GoToState ( this , false , VisualStates . StateDetailsButtonCollapsed ) ;
199196 }
200197 else if ( mode is TableViewRowDetailsVisibilityMode . VisibleWhenExpanded )
@@ -209,19 +206,37 @@ internal void SetRowDetailsVisibility()
209206 }
210207
211208 /// <summary>
212- /// Handles the Checked event of the details toggle button.
209+ /// Handles the Tapped event of the details toggle button.
210+ /// </summary>
211+ private void OnDetailsToggleButtonTapped ( object sender , TappedRoutedEventArgs e )
212+ {
213+ ToggleDetailsPane ( TableViewRow ? . Content , _detailsToggleButton ! . IsChecked ?? false ) ;
214+ }
215+
216+ /// <summary>
217+ /// Toggles the visibility of the details pane.
213218 /// </summary>
214- private void OnDetailsToggleButtonChecked ( object sender , RoutedEventArgs e )
219+ private void ToggleDetailsPane ( object ? content , bool isVisible )
215220 {
216- VisualStates . GoToState ( this , false , VisualStates . StateDetailsVisible ) ;
221+ if ( TableView is null || content is null ) return ;
222+
223+ TableView . DetailsPaneStates . AddOrUpdate ( content , isVisible ) ;
224+ var state = isVisible ? VisualStates . StateDetailsVisible : VisualStates . StateDetailsCollapsed ;
225+ VisualStates . GoToState ( this , false , state ) ;
217226 }
218227
219228 /// <summary>
220- /// Handles the Unchecked event of the details toggle button .
229+ /// Ensures that the details pane visibility is synchronized for the specified item when row .
221230 /// </summary>
222- private void OnDetailsToggleButtonUnChecked ( object sender , RoutedEventArgs e )
231+ internal void ApplyDetailsPaneState ( object ? item )
223232 {
224- VisualStates . GoToState ( this , false , VisualStates . StateDetailsCollapsed ) ;
233+ if ( TableView ? . RowDetailsVisibilityMode is TableViewRowDetailsVisibilityMode . VisibleWhenExpanded &&
234+ _detailsToggleButton is not null && TableView is not null && item is not null )
235+ {
236+ var isChecked = TableView . DetailsPaneStates . TryGetValue ( item , out var value ) ? value . Value : false ;
237+ _detailsToggleButton ! . IsChecked = isChecked ;
238+ ToggleDetailsPane ( item , isChecked ) ;
239+ }
225240 }
226241
227242 /// <summary>
0 commit comments