从StaticResource设置RowDefinition高度
在我的WPF样式中,我已经定义了一个标准的网格行高度,我想应用于几个地方,如下所示:
22
但是,当我想这样应用时,它不起作用:
相反,我需要创建一个完整的风格,如:
<!---->
从注释掉的行中可以看出,试图引用Style定义中的数字常量也不起作用,但“硬编码”值也可以。
现在我查了一下,我想这是因为与Height属性相关联的类型是GridLength,并且它在某种程度上无法在从另一个资源传入时自动转换double值…
问题是似乎没有办法从XAML创建GridLength对象。 价值属于只读。 所以像这样的东西也不起作用:
有没有办法让它工作,或者我应该忘记使用该常量,只使用带有硬编码值的RowDefinition样式代替常量?
当您“硬编码”值时,XAML处理器会查找可以将其从字符串转换为必要类型的转换器。 甚至你的TableRowHeight
资源也在使用DoubleConverter来创建。 GridLength
使用GridLengthConverter 。
因此编译器中没有自动转换/转换 – WPF需要显式查找类并调用convert方法。 在StaticResource
的情况下,它会跳过此步骤。
绑定确实使用类型转换器,因此以下方法可以按预期工作:
这是有效的,因为GridLengthConverter
知道如何从Double
转换。 但是,在您的情况下,这不应该是必要的。 如果以初始化Double
(在标记内)的方式初始化GridLength
资源,则在分配资源之前将调用字符串转换:
22
然后你就可以直接调用资源了。
试试这个:
50 ....
您必须创建GridLength
类型的资源才能应用为RowDefinition.Height
的类型为GridLength
:
50
无论如何,这将适用于您想要应用它。