Skip to content

Commit ee87782

Browse files
committed
Resize PM UI checkbox texts to correct size
1 parent 1a7536a commit ee87782

2 files changed

Lines changed: 62 additions & 2 deletions

File tree

src/NuGet.Clients/NuGet.PackageManagement.UI/Xamls/PackageManagerTopPanel.xaml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,24 @@
189189
<Grid.ColumnDefinitions>
190190
<ColumnDefinition MaxWidth="320" MinWidth="118"/>
191191
<ColumnDefinition Width="auto" />
192-
<ColumnDefinition MaxWidth="125" />
193-
<ColumnDefinition MaxWidth="150"/>
192+
<ColumnDefinition MaxWidth="{Binding ActualWidth, ElementName=_measurerPrerelease}" />
193+
<ColumnDefinition MaxWidth="{Binding ActualWidth, ElementName=_measurerVulnerabilities}" />
194194
</Grid.ColumnDefinitions>
195+
196+
<!-- hidden text measurers mirror the checkbox labels so we can bind MaxWidth -->
197+
<TextBlock
198+
x:Name="_measurerPrerelease"
199+
Visibility="Hidden"
200+
Text="{x:Static nuget:Resources.Checkbox_IncludePrerelease}"
201+
FontSize="{Binding FontSize, RelativeSource={RelativeSource AncestorType=UserControl}}"
202+
FontFamily="{Binding FontFamily, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
203+
<TextBlock
204+
x:Name="_measurerVulnerabilities"
205+
Visibility="Hidden"
206+
Text="{x:Static nuget:Resources.Checkbox_Show_Vulnerable_Only}"
207+
FontSize="{Binding FontSize, RelativeSource={RelativeSource AncestorType=UserControl}}"
208+
FontFamily="{Binding FontFamily, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
209+
195210
<!-- container of the search control -->
196211
<Border
197212
Grid.Column="0"

src/NuGet.Clients/NuGet.PackageManagement.UI/Xamls/PackageManagerTopPanel.xaml.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,51 @@ public PackageManagerTopPanel()
4343
var cvs = Resources["cvsPackageSources"] as CollectionViewSource;
4444
cvs.Culture = CultureInfo.DefaultThreadCurrentUICulture;
4545
cvs.Source = PackageSources;
46+
47+
// Hook Loaded so we can measure hidden text measurers and set column MaxWidth.
48+
Loaded += PackageManagerTopPanel_Loaded;
49+
}
50+
51+
private void PackageManagerTopPanel_Loaded(object sender, RoutedEventArgs e)
52+
{
53+
// Perform an immediate measurement to initialize column widths.
54+
UpdateMeasuredColumnWidths();
55+
}
56+
57+
private void UpdateMeasuredColumnWidths()
58+
{
59+
try
60+
{
61+
if (_measurerPrerelease == null || _measurerVulnerabilities == null || _checkboxPrerelease == null)
62+
{
63+
return;
64+
}
65+
66+
// Measure the hidden TextBlocks with infinite available width so they compute their natural width.
67+
_measurerPrerelease.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
68+
_measurerVulnerabilities.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
69+
70+
double w1 = _measurerPrerelease.DesiredSize.Width;
71+
double w2 = _measurerVulnerabilities.DesiredSize.Width;
72+
73+
// Add some slack to account for the checkbox glyph and margins.
74+
const double extra = 28.0;
75+
76+
var parentGrid = _checkboxPrerelease.Parent as Grid;
77+
if (parentGrid != null && parentGrid.ColumnDefinitions.Count > 3)
78+
{
79+
parentGrid.ColumnDefinitions[2].MaxWidth = w1 + extra;
80+
parentGrid.ColumnDefinitions[3].MaxWidth = w2 + extra;
81+
}
82+
}
83+
catch (InvalidOperationException)
84+
{
85+
// Swallow exceptions from layout/measure to avoid breaking UI initialization.
86+
}
87+
catch (ArgumentException)
88+
{
89+
// Swallow exceptions from layout/measure to avoid breaking UI initialization.
90+
}
4691
}
4792

4893
public void CreateAndAddConsolidateTab()

0 commit comments

Comments
 (0)