in sources/Google.Solutions.Mvvm/Theme/DpiAwarenessRuleset.cs [42:136]
private void AssertControlStyle(Control c)
{
if (c is Form form)
{
//
// Forms must use:
//
// AutoScaleMode = DPI
// CurrentAutoScaleDimensions = 96x96
//
Debug.Assert(
form.AutoScaleMode == AutoScaleMode.Dpi ||
form.AutoScaleMode == AutoScaleMode.Inherit);
if (form.AutoScaleMode == AutoScaleMode.Dpi)
{
Debug.Assert(form.CurrentAutoScaleDimensions.Width >= DpiAwareness.DefaultDpi.Width);
Debug.Assert(form.CurrentAutoScaleDimensions.Width == form.CurrentAutoScaleDimensions.Height);
}
if (form.FormBorderStyle == FormBorderStyle.FixedDialog ||
form.FormBorderStyle == FormBorderStyle.FixedToolWindow ||
form.FormBorderStyle == FormBorderStyle.FixedSingle)
{
//
// If the Control box is hidden, the size of the form isn't
// adjusted correctly.
//
Debug.Assert(form.ControlBox);
if (form.Parent != null)
{
Debug.Assert(!form.ShowIcon);
Debug.Assert(!form.ShowInTaskbar);
}
}
}
else if (c is UserControl userControl)
{
//
// UserControls must use:
//
// AutoScaleMode = DPI
// CurrentAutoScaleDimensions = 96x96
//
Debug.Assert(userControl.AutoScaleMode == AutoScaleMode.Dpi ||
userControl.AutoScaleMode == AutoScaleMode.Inherit);
if (userControl.AutoScaleMode == AutoScaleMode.Dpi)
{
Debug.Assert(userControl.CurrentAutoScaleDimensions.Width >= DpiAwareness.DefaultDpi.Width);
Debug.Assert(userControl.CurrentAutoScaleDimensions.Width == userControl.CurrentAutoScaleDimensions.Height);
}
bool isLaterallyAnchored(Control c)
{
return
c.Dock == DockStyle.Fill ||
c.Anchor.HasFlag(AnchorStyles.Top | AnchorStyles.Bottom) ||
c.Anchor.HasFlag(AnchorStyles.Left | AnchorStyles.Right);
}
//
// If the UserControl is anchored and contains controls
// that are also anchored, then it must use the
// DpiAwareUserControl mitigation.
//
if (!(userControl is DpiAwareUserControl) &&
isLaterallyAnchored(userControl) &&
userControl.Controls.OfType<Control>().Any(isLaterallyAnchored))
{
Debug.Assert(false, "User control should be derived from " + nameof(DpiAwareUserControl));
}
}
else if (c is PropertyGrid)
{
//
// PropertyGrid uses Mode = None, and that's ok.
//
}
else if (c is ContainerControl otherContainer)
{
//
// Other containers should use Mode = Inherit.
//
Debug.Assert(otherContainer.AutoScaleMode == AutoScaleMode.Inherit);
}
else if (c is CheckBox checkBox)
{
//
// Auto-scaling is prone to cause alignment issues.
//
Debug.Assert(!checkBox.AutoSize, $"{checkBox.Name} should use AutoScale = false");
}
}