C# 表单,创建可单击的框架(背景)

C# 表单,创建可单击的框架(背景),c#,xaml,xamarin.forms,frame,C#,Xaml,Xamarin.forms,Frame,由于按钮仅限于在Xamarin中使用其内部图像。表单和StackLayout不支持CornerRadius属性,我们决定使用Frame代替它们,执行Tapped事件,但问题是单击后背景不会改变。 那么,我如何创建并设置一个可点击的背景框呢?好吧,你无法处理xamarin表单中的视觉状态。但是,您可以使用下面的代码来使用自定义渲染器实现状态转换 public class CustomFrameRenderer : Xamarin.Forms.Platform.Android.AppCompat.F

由于按钮仅限于在Xamarin中使用其内部图像。表单和
StackLayout
不支持
CornerRadius
属性,我们决定使用
Frame
代替它们,执行
Tapped
事件,但问题是单击后背景不会改变。
那么,我如何创建并设置一个可点击的背景框呢?

好吧,你无法处理xamarin表单中的视觉状态。但是,您可以使用下面的代码来使用自定义渲染器实现状态转换

public class CustomFrameRenderer : Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer
{
    private Color backgroundColor;

    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);
        backgroundColor = Element.BackgroundColor;
        Control.Touch += Control_Touch;
    }

    private void Control_Touch(object sender, TouchEventArgs e)
    {
        switch (e.Event.Action)
        {
            case MotionEventActions.Down:
                Element.BackgroundColor = Color.Green;
                break;
            case MotionEventActions.Up:
                Element.BackgroundColor = backgroundColor;
                break;
        }
    }
}
公共类CustomFrameRenderer:Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer
{
私色背景色;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
backgroundColor=Element.backgroundColor;
Control.Touch+=Control\u Touch;
}
私有无效控制_Touch(对象发送器,TouchEventArgs e)
{
开关(如事件、动作)
{
案例MotionEventActions.Down:
Element.BackgroundColor=Color.Green;
打破
case MotionEventActions.Up:
Element.BackgroundColor=背景色;
打破
}
}
}

注意:上面的代码会影响所有帧,因此更好地子类化并创建一个新帧,以避免整个应用程序中的背景色转换。

那里的控件是什么?框架未实现任何控件?控件是cardview(Xamarin.forms框架元素的本机元素)