Skip to content

Commit 8666df7

Browse files
committed
[SegmentedItem] Refresh after visibility change
1 parent 61ad76e commit 8666df7

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

XamlToolkit.WinUI.Controls/Segmented/SegmentedItem.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace winrt::XamlToolkit::WinUI::Controls::implementation
1212
SegmentedItem::SegmentedItem()
1313
{
1414
DefaultStyleKey(winrt::box_value(winrt::xaml_typename<class_type>()));
15+
RegisterPropertyChangedCallback(UIElement::VisibilityProperty(), { this, &SegmentedItem::OnVisibilityChanged });
1516
}
1617

1718
void SegmentedItem::OnApplyTemplate()
@@ -21,6 +22,19 @@ namespace winrt::XamlToolkit::WinUI::Controls::implementation
2122
ContentChanged();
2223
}
2324

25+
void SegmentedItem::OnVisibilityChanged(DependencyObject const& sender, DependencyProperty const& dp)
26+
{
27+
// If the parent is a Segmented control with an EqualPanel,
28+
// we need to invalidate measure to update the layout.
29+
if (auto segmented = Parent().try_as<winrt::XamlToolkit::WinUI::Controls::Segmented>())
30+
{
31+
if (auto panel = segmented.ItemsPanelRoot().try_as<Panel>())
32+
{
33+
panel.InvalidateMeasure();
34+
}
35+
}
36+
}
37+
2438
void SegmentedItem::OnContentChanged(IInspectable const& oldContent, IInspectable const& newContent)
2539
{
2640
base_type::OnContentChanged(oldContent, newContent);

XamlToolkit.WinUI.Controls/Segmented/SegmentedItem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ namespace winrt::XamlToolkit::WinUI::Controls::implementation
1919

2020
void OnApplyTemplate();
2121

22+
void OnVisibilityChanged(DependencyObject const& sender, DependencyProperty const& dp);
23+
2224
void OnContentChanged(IInspectable const& oldContent, IInspectable const& newContent);
2325

2426
void ContentChanged();

0 commit comments

Comments
 (0)