C# DependencyProperty接受双精度;“自动”;似乎有效,但会出现错误
我希望可以使用“Auto”字符串在用户控件上设置height属性 它似乎工作正常,但在输出窗口中出现以下错误:C# DependencyProperty接受双精度;“自动”;似乎有效,但会出现错误,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我希望可以使用“Auto”字符串在用户控件上设置height属性 它似乎工作正常,但在输出窗口中出现以下错误: System.Windows.Data Error: 23 : Cannot convert 'System.Object' from type 'Object' to type 'System.Double' for 'en-US' culture with default conversions; consider using Converter property of Bin
System.Windows.Data Error: 23 : Cannot convert 'System.Object'
from type 'Object' to type 'System.Double' for 'en-US' culture
with default conversions; consider using Converter property of Binding.
NotSupportedException:'System.NotSupportedException: DoubleConverter cannot convert from System.Object.
at System.ComponentModel.TypeConverter.GetConvertFromException(Object value)
at System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
System.Windows.Data Error: 6 : 'ObjectSourceConverter'
converter failed to convert value 'System.Object' (type 'Object');
fallback value will be used, if available. BindingExpression:Path=ContentHeight;
DataItem='UcDataTempl' (Name='');
target element is 'Border' (Name='');
target property is 'Height' (type 'Double')
NotSupportedException:'System.NotSupportedException: DoubleConverter cannot convert from System.Object.
at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
at MS.Internal.Data.DefaultValueConverter.ConvertFrom(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture)
at MS.Internal.Data.ObjectSourceConverter.Convert(Object o, Type type, Object parameter, CultureInfo culture)
at System.Windows.Data.BindingExpression.ConvertHelper(IValueConverter converter, Object value, Type targetType, Object parameter, CultureInfo culture)'
如何正确执行此操作?以下是该属性的实现:
[TypeConverter(typeof (LengthConverter))]
public double Height
{
get
{
return (double) this.GetValue(FrameworkElement.HeightProperty);
}
set
{
this.SetValue(FrameworkElement.HeightProperty, (object) value);
}
}
处理自动到double.NaN的转换
所以你需要的是
[TypeConverter(typeof (LengthConverter))]
public double ContentHeight
{
get { return GetValue(ContentHeightProperty); }
set { SetValue(ContentHeightProperty, value); }
}
我知道这有一个答案,恰好适合提问的情况,但遗憾的是,不适合提问的情况。在我的例子中,我需要this函数和dependencProperty,因为它是作为嵌套在控件中的所有元素的静态属性访问的。(就像“Canvas.Top”) 幸运的是,我只做了很少的调整就编译了它。请注意,该属性设置在DP的所有3个属性上
[TypeConverter(typeof (LengthConverter))]
public double ContentHeight
{
get { return GetValue(ContentHeightProperty); }
set { SetValue(ContentHeightProperty, value); }
}
[TypeConverter(typeof(LengthConverter))]
public static readonly DependencyProperty ChildrenPaddingProperty =
DependencyProperty.RegisterAttached(
"ChildrenPadding",
typeof(double),
typeof(Layout),
new FrameworkPropertyMetadata(10d, FrameworkPropertyMetadataOptions.AffectsArrange)
);
[TypeConverter(typeof(LengthConverter))]
public static double GetChildrenPadding(UIElement control) {
return (double)control.GetValue(ChildrenPaddingProperty);
}
[TypeConverter(typeof(LengthConverter))]
public static void SetChildrenPadding(UIElement control, double yn) {
control.SetValue(ChildrenPaddingProperty, yn);
}