gpt4 book ai didi

xamarin - 在 Xamarin.forms 中单击并按住时更改按钮的背景颜色

转载 作者:行者123 更新时间:2023-12-02 03:38:06 26 4
gpt4 key购买 nike

在我的 Xamarin.forms 应用程序中,我有两个按钮。我需要实现以下目标...

  1. 默认情况下,两个按钮都有白色背景
  2. 当用户点击按钮时,其背景应更改为蓝色
  3. 如果用户按住,则颜色应更改为蓝色,当用户松开时,颜色应恢复为白色
  4. 显然只有一个按钮可以有蓝色背景。

示例

enter image description here

最佳答案

您必须设计一个自定义渲染器才能实现此目的。

在您的 Core/PCL 项目中创建一个按钮类:

public class CustomButton : Button
{
public event EventHandler OnPressed;

public event EventHandler OnReleased;

public void OnPressed()
{
OnPressed?.Invoke(this, EventArgs.Empty);
}

public void OnReleased()
{
OnReleased?.Invoke(this, EventArgs.Empty);
}
}

然后在您的 iOS 和 Android 中创建渲染器:

例如:Android:

[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace yourproject.Droid.Renderer
{
public class CustomButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);

var customRendererButton = e.NewElement as CustomButton;

var control = Control as Android.Widget.Button;
control.Touch += (object sender, TouchEventArgs args) =>
{
if (args.Event.Action == MotionEventActions.Up)
{
customRendererButton.OnReleased();
}

else if (args.Event.Action == MotionEventActions.Down)
{
customRendererButton.OnPressed();
}
};
}
}
}

iOS:

[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace yourproject.iOS.Renderer
{
public class CustomButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);

var customRendererButton = e.NewElement as CustomButton;

var control = Control as UIButton;
control.TouchDown += delegate
{
customRendererButton.OnPressed();
};
thisButton.TouchUpInside += delegate
{
customRendererButton.OnReleased();
};
}
}
}

然后在您的 xaml 文件中,将按钮链接到自定义按钮:

在 xaml 的主标记中将命名空间定义为自定义:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:custom="clr-namespace:yourproject.Core.namespaceofCustomButton;assembly=yourproject.Core">

那么,

<custom:CustomButton x:Name="CustomButton"

然后在 UI 中您可以访问如下:

CustomButton.OnPressed += (sender, args) =>
{
//Your code
};

CustomButton.OnReleased += (sender, args) =>
{
//Your code.
};

希望这有帮助!

关于xamarin - 在 Xamarin.forms 中单击并按住时更改按钮的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49534381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com