Xamarin.Forms UWP Button渲染器CornerRadius属性问题求助
我太懂你这个糟心的问题了——Xamarin.Forms 3.x把BorderRadius弃用换成了CornerRadius,但UWP端的FormsButton压根没同步更新这个新属性,直接用旧的BorderRadius还会导致应用崩溃,结合你用的VS 15.7.1和Xamarin 3.0.0.446417版本,给你一套直接可行的解决方案:
1. 自定义Button渲染器,直接操作原生UWP Button控件
UWP原生的Button控件本身就自带CornerRadius属性,我们可以绕过Xamarin封装的FormsButton,直接操控原生控件来设置圆角,完全避开弃用属性的坑。
完整的自定义渲染器代码
using Xamarin.Forms; using Xamarin.Forms.Platform.UWP; using Windows.UI.Xaml.Controls; [assembly: ExportRenderer(typeof(Button), typeof(CustomButtonRenderer))] namespace YourAppNamespace.UWP.Renderers { public class CustomButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Button> e) { base.OnElementChanged(e); // 控件初始化时就设置好圆角 if (Control != null && e.NewElement != null) { UpdateCornerRadius(e.NewElement.CornerRadius); } } protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); // 当CornerRadius属性动态变化时同步更新 if (e.PropertyName == Button.CornerRadiusProperty.PropertyName) { UpdateCornerRadius(Element.CornerRadius); } } private void UpdateCornerRadius(double cornerRadius) { var nativeButton = Control as Button; if (nativeButton != null) { nativeButton.CornerRadius = new Windows.UI.Xaml.CornerRadius(cornerRadius); } } } }
2. 关键细节说明
- 为啥不能用
Control.BorderRadius:在你当前的Xamarin版本里,UWP端的FormsButton已经彻底移除了BorderRadius属性,直接访问会触发属性不存在的异常,这就是导致崩溃的根源。 - 原生控件的优势:UWP原生
Button的CornerRadius是系统原生支持的属性,设置逻辑更稳定,还能完美匹配Xamarin.Forms中CornerRadius的数值。
把这段代码放到你的UWP项目里,替换YourAppNamespace为你实际的项目命名空间,就能解决崩溃问题,同时正常实现圆角按钮的效果了。
内容的提问来源于stack exchange,提问作者Tek Mun
相关产品推荐
相关产品推荐

