【问题标题】:How to bind size properties with a unit different than px?如何将大小属性与不同于 px 的单位绑定?
【发布时间】:2014-10-21 03:06:54
【问题描述】:
每个用户控件大小的默认单位是 px,但可以轻松地将大小设置为不同的单位,例如:
<Canvas Height="29.7cm" Width="21cm" />
但是如果我想绑定这些属性怎么办?如何保留有关我想要的单位的信息?
【问题讨论】:
标签:
wpf
xaml
data-binding
user-controls
units-of-measurement
【解决方案1】:
您可以创建一个自定义的converter,它将字符串表示形式转换为双精度(使用LengthConverter):
[ValueConversion(typeof(string), typeof(double))]
public class SizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double size = (double)new LengthConverter().ConvertFrom(value.ToString());
return size;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("SizeConverter is a oneway converter.")
}
}
之后,您可以从 XAML 中引用该转换器:
<src:SizeConverter x:Key="sizeConverter"/>
<Canvas Height="{Binding Path=Height, Converter={StaticResource sizeConverter}}"
Width="{Binding Path=Width, Converter={StaticResource sizeConverter}}" />
(这里的Height 和Width 是strings 在您的DataContext 的DataContext 中可用。)