C# WPF - GridLength GridUnitType.Auto
Может кто-нибудь объяснить разницу между использованием:
GridLength length = new GridLength(0, GridUnitType.Auto)
а также
GridLength length = new GridLength(1, GridUnitType.Auto)
Мое ограниченное знание этого приводит меня к убеждению, что оба они будут идентичными решениями из-за того, что auto означает "auto", что делает излишним двойное значение.
Большинство примеров, которые я видел, показывают GridUnitType.Auto
предшествует 1, а не 0, но мне кажется, что любой из вариантов работает одинаково?
Это тот случай, или кто-то может пролить свет на то, если / как они отличаются
1 ответ
Я думаю, что ваше понимание верно, когда значение GridUnitType.Auto
используется, первое значение, переданное конструктору, является избыточным, так как размер будет определяться объектом содержимого.
Это имеет некоторый смысл в контексте GridLength
конструктор структуры, чтобы сохранить этот параметр (даже если он не используется в данном случае), так как он позволяет второму типу параметра содержать значения, которые описывают все доступные состояния GridUnitType
,
Из документации:
Перечислимый тип GridUnitType
может содержать следующие значения:
Auto - The size is determined by the size properties of the content object.
Pixel - The value is expressed as a pixel.
Star - The value is expressed as a weighted proportion of available space.
Так что действительно, первый параметр имеет значение только тогда, когда второй параметр установлен на GridUnitType.Pixel
или же GridUnitType.Star
,
Это не сработало бы иначе, например, если бы вы попытались получить конструктор, который принял бы 1 параметр как GridUnitType
и требуется только второй параметр, если вы использовали Pixel
или же Star
,
Таким образом, вы получаете преимущество, когда у вас есть конструктор с одним параметром, который принимает значение типа double без указания дополнительного типа. Хотя он имеет стоимость потенциально странно выглядящего двухпараметрического конструктора при использовании Auto
(как в вашем примере).