Я заметил предупреждение в 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» с той же ошибкой, что и выше.
Если значение по умолчанию не задано, появляется та же ошибка с той разницей, что ввод по умолчанию.