Aar*_*ite 14 wpf xaml units-of-measurement density-independent-pixel
最近我发现WPF支持XAML中的不同测量单位.除了默认DIP,还支持像素,英寸和厘米(据我所知).这允许设计者编写如下的XAML:
<Canvas>
<Line X1="0cm" X2="3cm" Y1="1cm" Y2="3cm" Stroke="Black"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
但是,您无法绑定这些值.想象一下,我们有一个带有Dimension属性的ViewModel,它是一个String,例如"7cm".以下将无效:
<Button Width="{Binding Dimension}">Test</Button>
Run Code Online (Sandbox Code Playgroud)
抛出FormatException.同样,FrameworkElement
在代码隐藏中创建时,如下所示:
Canvas1.Children.Add(new Button() { Width = "3cm", Content = "Test"});
Run Code Online (Sandbox Code Playgroud)
编译失败,因为在构造函数/尝试创建控件的任何地方抛出异常.
我想知道:
编辑:
以下是评论中的链接,可解决此问题:
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width.aspx
H.B*_*.B. 14
您可以通过应用XAML解析器使用的相同转换在后面的代码中执行此操作,如果您不介意传递字符串,则无需重新实现此逻辑:
button.Width = (double)new LengthConverter().ConvertFrom("2cm");
Run Code Online (Sandbox Code Playgroud)
XAML解析器使用TypeConverters将字符串转换为所需的值,在属性的文档页面中,Width
您可以看到它TypeConverterAttribute
指定了LengthConverter
应该使用的字符串.此属性可用于本地覆盖属性的处理方式,但也可以在类级别应用,因此,如果某个Employee
类具有此属性,指定EmployeeConverter
应使用该属性,则所述转换器将是类型属性的默认值Employee
.
我有点惊讶绑定不适用这种类型的转换器,但在内部使用它IValueConverter
会很简单,实际上你可以创建一个标记扩展,它IValueConverter
从类型转换器构造一个很好的通用.
归档时间: |
|
查看次数: |
3373 次 |
最近记录: |