如何向Location为Object类型的非Binding UserControl传递Point参数?是否仅能用Converters?
解决方案:无需Converter的几种实现方式
你的Location是Object类型,无需绑定就能直接在XAML中设置Point值,不是只能用Converter,还有以下可行方式:
1. 对象元素语法(最直接)
直接实例化Point对象赋值给Location,这是XAML中设置复杂类型属性的标准写法:
<controls:MyUserControl> <controls:MyUserControl.Location> <Point X="1" Y="1"/> </controls:MyUserControl.Location> </controls:MyUserControl>
2. 利用系统内置转换器的属性语法
如果想写成单行属性形式,可以借助WPF内置的PointConverter,通过绑定标记扩展触发转换:
<controls:MyUserControl Location="{Binding Source='1,1', Converter={x:Static System.Windows.PointConverter.Instance}}"/>
这种方式用了系统自带的转换器,不需要自己编写代码。
3. 自定义类型转换器(适配自定义字符串格式)
如果一定要用"1,1"或"1 1"这类字符串直接赋值,就需要自定义类型转换器:
- 继承
TypeConverter类,重写CanConvertFrom和ConvertFrom方法,实现字符串到Point的转换逻辑; - 在
Location属性上标记[TypeConverter(typeof(自定义转换器类型))],这样XAML会自动识别并转换字符串值。
你之前的写法失效原因
"1,1"/"1 1"是字符串类型,Location作为Object属性,WPF不会自动触发字符串到Point的转换(无类型转换器标记);{1 1}不符合XAML语法,大括号内必须是合法的标记扩展格式,因此会直接报错。
内容的提问来源于stack exchange,提问作者Danial
相关产品推荐
相关产品推荐

