Skip to content

Commit 945c8cd

Browse files
authored
Pager: Fix bug where setting button visibility would be ignored (#4121)
1 parent 3cc79d0 commit 945c8cd

7 files changed

Lines changed: 1437 additions & 11 deletions

File tree

dev/PagerControl/InteractionTests/PagerControlTestPageElements.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,17 @@ public Button GetIncreaseNumberOfPagesButton()
236236
}
237237
private Button IncreaseNumberOfPagesButton;
238238

239+
public Button GetCheckIfButtonsHiddenButton()
240+
{
241+
return GetElement(ref CheckIfButtonsHiddenButton, "CheckIfButtonsHiddenButton");
242+
}
243+
private Button CheckIfButtonsHiddenButton;
244+
public TextBlock GetCheckIfButtonsHiddenLabel()
245+
{
246+
return GetElement(ref CheckIfButtonsHiddenLabel, "CheckIfButtonsHiddenLabel");
247+
}
248+
private TextBlock CheckIfButtonsHiddenLabel;
249+
239250
public Button GetEnterInfinityModeButton()
240251
{
241252
return GetElement(ref EnterInfinityModeButton, "NumberOfPagesInfinityButton");

dev/PagerControl/InteractionTests/PagerControlTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,5 +555,23 @@ public void ChangingDisplayModeTest()
555555
VerifyAutoDisplayMode();
556556
}
557557
}
558+
559+
[TestMethod]
560+
[TestProperty("TestSuite", "C")]
561+
public void VerifyButtonVisibilitySetInXAMLApplied()
562+
{
563+
using (var setup = new TestSetupHelper("PagerControl Tests"))
564+
{
565+
elements = new PagerControlTestPageElements();
566+
567+
// Invoke button
568+
elements.GetCheckIfButtonsHiddenButton().Click();
569+
570+
Wait.ForIdle();
571+
572+
// Check result
573+
Verify.AreEqual("Passed", elements.GetCheckIfButtonsHiddenLabel().GetText(), "Not all buttons where hidden and as such, the test result was not 'Passed'");
574+
}
575+
}
558576
}
559577
}

dev/PagerControl/PagerControl.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ void PagerControl::OnApplyTemplate()
124124
m_comboBox.set(comboBox);
125125
if (comboBox)
126126
{
127+
FillComboBoxCollectionToSize(NumberOfPages());
127128
comboBox.SelectedIndex(SelectedPageIndex() - 1);
128129
winrt::AutomationProperties::SetName(comboBox, ResourceAccessor::GetLocalizedStringResource(SR_PagerControlPageTextName));
129130
m_comboBoxSelectionChangedRevoker = comboBox.SelectionChanged(winrt::auto_revoke, { this, &PagerControl::ComboBoxSelectionChanged });
@@ -148,6 +149,29 @@ void PagerControl::OnApplyTemplate()
148149
OnDisplayModeChanged();
149150
UpdateOnEdgeButtonVisualStates();
150151
OnNumberOfPagesChanged(0);
152+
153+
// Update button visibilities
154+
OnButtonVisibilityChanged(FirstButtonVisibility(),
155+
c_firstPageButtonVisibleVisualState,
156+
c_firstPageButtonNotVisibleVisualState,
157+
c_firstPageButtonHiddenVisualState,
158+
0);
159+
OnButtonVisibilityChanged(PreviousButtonVisibility(),
160+
c_previousPageButtonVisibleVisualState,
161+
c_previousPageButtonNotVisibleVisualState,
162+
c_previousPageButtonHiddenVisualState,
163+
0);
164+
OnButtonVisibilityChanged(NextButtonVisibility(),
165+
c_nextPageButtonVisibleVisualState,
166+
c_nextPageButtonNotVisibleVisualState,
167+
c_nextPageButtonHiddenVisualState,
168+
NumberOfPages() - 1);
169+
OnButtonVisibilityChanged(LastButtonVisibility(),
170+
c_lastPageButtonVisibleVisualState,
171+
c_lastPageButtonNotVisibleVisualState,
172+
c_lastPageButtonHiddenVisualState,
173+
NumberOfPages() - 1);
174+
151175
OnSelectedPageIndexChange(-1);
152176
}
153177

dev/PagerControl/TestUI/PagerControlPage.xaml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,19 @@
4848
</Style>
4949
</muxc:PagerControl.Resources>
5050
</muxc:PagerControl>
51+
<TextBlock Text="Button state set in XAML test PagerControl"/>
52+
<muxc:PagerControl x:Name="TemplateButtonVisibilitySetPager"
53+
VerticalAlignment="Top"
54+
HorizontalAlignment="Left"
55+
NumberOfPages="10"
56+
SelectedPageIndex="2"
57+
FirstButtonVisibility="Hidden"
58+
PreviousButtonVisibility="Hidden"
59+
NextButtonVisibility="Hidden"
60+
LastButtonVisibility="Hidden"
61+
DisplayMode="ButtonPanel"
62+
ButtonPanelAlwaysShowFirstLastPageIndex="True"/>
63+
5164
</StackPanel>
5265

5366
<ScrollViewer Grid.Column="1" HorizontalScrollMode="Enabled" HorizontalScrollBarVisibility="Visible">
@@ -116,7 +129,10 @@
116129
<Button x:Name="NumberOfPagesSetterButton" Content="Set NumberOfPages to 100" Click="NumberOfPagesSetterButtonClicked"/>
117130
<Button x:Name="NumberOfPagesInfinityButton" AutomationProperties.Name="NumberOfPagesInfinityButton" Content="Set NumberOfPages to -1 (aka Infinity mode)" Click="NumberOfPagesInfinityButtonClicked"/>
118131
<Button x:Name="IncreaseNumberOfPagesButton" Content="Increase NumberOfPages by 1" Click="IncreaseNumberOfPagesButtonClicked"/>
119-
132+
<StackPanel Orientation="Horizontal">
133+
<Button x:Name="CheckIfButtonsHiddenButton" Content="Check if buttons hidden on last pager" Click="CheckIfButtonsHiddenButtonClicked" AutomationProperties.Name="CheckIfButtonsHiddenButton"/>
134+
<TextBlock x:Name="CheckIfButtonsHiddenLabel" AutomationProperties.Name="CheckIfButtonsHiddenLabel"/>
135+
</StackPanel>
120136
</StackPanel>
121137
</Grid>
122138
<Grid Grid.Column="1" Margin="5">

dev/PagerControl/TestUI/PagerControlPage.xaml.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,26 @@ private void IncreaseNumberOfPagesButtonClicked(object sender, RoutedEventArgs a
127127
ComboBoxIsEnabledCheckBox.IsChecked = pagerComboBox?.IsEnabled;
128128
}
129129

130+
private void CheckIfButtonsHiddenButtonClicked(object sender, RoutedEventArgs args)
131+
{
132+
var rootGrid = VisualTreeHelper.GetChild(TemplateButtonVisibilitySetPager, 0);
133+
var backButtonsPanel = VisualTreeHelper.GetChild(rootGrid, 0);
134+
var firstPageButtonTemplatePager = VisualTreeHelper.GetChild(backButtonsPanel, 0) as Button;
135+
var previousPageButtonTemplatePager = VisualTreeHelper.GetChild(backButtonsPanel, 1) as Button;
136+
137+
var forwardButtonsPanel = VisualTreeHelper.GetChild(rootGrid, 4);
138+
var nextPageButtonTemplatePager = VisualTreeHelper.GetChild(forwardButtonsPanel, 0) as Button;
139+
var lastPageButtonTemplatePager = VisualTreeHelper.GetChild(forwardButtonsPanel, 1) as Button;
140+
141+
int violationCount = 0;
142+
violationCount += (firstPageButtonTemplatePager?.Visibility == Visibility.Collapsed || firstPageButton?.Opacity == 0) ? 0 : 1;
143+
violationCount += (previousPageButtonTemplatePager?.Visibility == Visibility.Collapsed || previousPageButton?.Opacity == 0) ? 0 : 1;
144+
violationCount += (nextPageButtonTemplatePager?.Visibility == Visibility.Collapsed || nextPageButton?.Opacity == 0) ? 0 : 1;
145+
violationCount += (lastPageButtonTemplatePager?.Visibility == Visibility.Collapsed || lastPageButton?.Opacity == 0) ? 0 : 1;
146+
147+
CheckIfButtonsHiddenLabel.Text = violationCount == 0 ? "Passed" : "Failed";
148+
}
149+
130150
private void OnSelectedIndexChanged(PagerControl sender, PagerControlSelectedIndexChangedEventArgs args)
131151
{
132152
UpdateNumberPanelContentTextBlock(this, null);

0 commit comments

Comments
 (0)