Xamarin.Forms - 可以使用原始元素名称编写自定义渲染器?
在Xamarin.Forms中,通常我会使用类名称(如“ButtonExt”)为按钮编写自定义渲染器。是否有可能使用原始名称(我猜覆盖)元素来编写自定义渲染器,如“Button”?Xamarin.Forms - 可以使用原始元素名称编写自定义渲染器?
基本上,我希望能够为我的应用程序中的所有按钮添加水平填充,但无需重命名所有Button
s到ButtonExt
(Xamarin.Forms中没有用于按钮的Padding属性)。换句话说,我希望能够说new Button { Padding = 20 }
而不是说new ButtonExt { Padding = 20 }
(项目是C#,而不是XAML)。
通常,在iOS的项目,我有:
[assembly: ExportRenderer(typeof(ButtonExt), typeof(ButtonExtRenderer))]
namespace StoreFulfillment.iOS
{
public class ButtonExtRenderer : ButtonRenderer
,并在共享项目中,我有:
using MySharedProject;
using Xamarin.Forms;
namespace MySharedProject.Renderers
{
public class ButtonExt : Button
{
...
然后我会说new ButtonExt { Padding = 20 }
。但为了能够写new Button { Padding = 20 }
,我不能写public class Button : Button
......所以我该如何做到这一点?
当然!只需将其注册为正常的Button
类型,并确保您调用所覆盖的所有基本方法,以保持原始的工作方式。
所以,你的属性,来注册的渲染器只是看起来像这样:
[assembly: ExportRenderer(typeof(Button), typeof(YourButtonRenderer))]
此外,还要确保你的实际需要自定义呈现。如果你只是想要一个简单的样式问题,请看Xamarin.Forms,尤其是隐式样式。
感谢您的快速响应 - 将尝试。是的,我知道所有关于样式,以及按钮如何做*不*具有填充属性:) – jbyrd
但是在Xamarin共享项目中,我将如何创建要为其添加自定义属性的类(即Padding)?使用ButtonExt,我声明类像'公共类ButtonExt:按钮{...' - 我不能做'公共类按钮:按钮'...? – jbyrd
@jbyrd您不能将自定义属性添加到已创建的类中,除非该类是“partial”类,而“Button”不是。因此,如您所说,您可以选择创建扩展方法或创建[附加属性](https://developer.xamarin.com/guides/xamarin-forms/xaml/attached-properties/),这就是'Grid.Row'属性(意思是'Button'类实际上没有'Button.Grid.Row'属性,但它仍然可以使用它)。我不认为我会使用附加的属性来处理你想要做的事情,但它仍然是一种选择。 – hvaughan3
@ hvaughan3 - 只是扩大我的问题 - 你能解决更新问题吗? – jbyrd
想知道如果扩展方法是答案 - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods – jbyrd