WPF - ширина элемента управления, привязанная к DependencyProperty - установка значения по умолчанию через PropertyMetadata в звездочку (*) - PullRequest
0 голосов
/ 04 марта 2020

Я заметил предупреждение в VisualStudio, что моя привязка ширины элемента управления к '*' (звездочка) недопустима. Я использовал PropertyMetadata внутри определения DependencyProperty для определения значений по умолчанию в Code-behind. Так как они имеют строковый тип, это не похоже на работу.

Мой XAML-код:

<TextBox Name="MyTextBox" Text="This is my cute little text." Width="{Binding ElementName=MyBox, Path=TextBoxWidth}" [...]/>

Мой код-позади:

    public static readonly DependencyProperty MinCharsQueryProperty = DependencyProperty.Register(
        "MinCharsQuery", typeof(int), typeof(MyBoxControl), new PropertyMetadata(1));
    public static readonly DependencyProperty TextBoxWidthProperty = DependencyProperty.Register(
        "TextBoxWidth", typeof(string), typeof(MyBoxControl), new PropertyMetadata("*"));
    public static readonly DependencyProperty TextBoxHeightProperty = DependencyProperty.Register(
        "TextBoxHeight", typeof(string), typeof(MyBoxControl), new PropertyMetadata("26"));

Могу ли я должен изменить мой тип со строки на что-то еще? Я спрашиваю об этом, потому что я нашел другие вопросы, где ответ уступает использованию new GridLength(80, GridUnitType.Star);, но мой контроль в этом случае не является сеткой.

Или другие предлагают вместо этого использовать «Авто» в сочетании с растяжкой горизонтального выравнивания, что Я также не хотел бы использовать из-за других побочных эффектов.

При помещении звездочки '' непосредственно в Widht = "" это, конечно, работает, как вы знаете. При использовании кода для установки этого свойства в выводе говорится, что он ожидает двойное число, а не строку. Поэтому в моем способе использования Code-Behind отсутствует какой-то предварительный расчет, который достигается, например, созданием нового GridLength и назначением его непосредственно свойству controls-вместо того, чтобы использовать значение-метаданных свойства-default.

1) Я боюсь, что не могу достичь этого с помощью PropertyMetadata? 2) При переходе к прямому назначению, что эквивалентно GridLenth of Width и Height любого элемента управления? Я нахожу только вопросы, связанные с сеткой.

Спасибо.

Редактировать: Изменение свойства DependencyProperty на тип double приводит к исключению, что ожидается строка. Использование «Авто», «double.NaN» или «Double.NaN» в качестве строки не работает. Он не может преобразовать его в удвоенную, поскольку он просто не может использовать '*'. Консоль говорит, что нужно попытаться использовать FallbackValue, если дано.

Использование FallbackValue внутри привязки не работает ни с «*», «Auto», «double.NaN» или «Double.NaN» с той же ошибкой, что и выше.

Если значение по умолчанию не задано, появляется та же ошибка с той разницей, что ввод по умолчанию.

1 Ответ

0 голосов
/ 11 марта 2020

Похоже, что просто невозможно использовать DataBinding в полях ширины, если не использовать обычные двойные значения.

Использование таких вещей, как '*' или 'Auto', возможно только для непосредственного использования в XAML. Все остальные попытки приведут к ошибкам в выводе консоли.

Если кто-то хочет использовать привязку данных, но не дает никаких значений по умолчанию, он должен жить с этими предупреждениями в выводе консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...