Xamarin.Forms问题带有边框的按钮?

时间:2018-11-22 07:45:57

标签: xamarin xamarin.forms xamarin.android

我有这个按钮:

 <Button x:Name="btnNext" BorderWidth="2" BorderColor="#96AF5B" BorderRadius="4" 
                WidthRequest="110" HeightRequest="25" Padding="0" VerticalOptions="Center" HorizontalOptions="Center"
                BackgroundColor="#FFFCFF" FontSize="Default"

                RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,
            Property=Width,Factor=0.5, Constant=-55}"

                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
            ElementName=videoPlayer,Property=Height,Factor=0.85, Constant=12.5}"  FontFamily="verdana"
                    Clicked="Next_Clicked"/>

在Android中,当点击该按钮时,它会在按钮的左上方显示一个小方块,使用框架而不是设置按钮的边框属性时也会发生这种情况。

这是一个gif: https://i.stack.imgur.com/FGv5j.gif

1 个答案:

答案 0 :(得分:0)

实际上,这个错误已经存在了一段时间,如果我没记错的话,我们从3月中旬左右开始遇到此问题,此后一直存在。

如果您检查Bugzilla,则记录了由于此而导致人们面临的所有问题的大量错误:

https://bugzilla.xamarin.com/show_bug.cgi?id=58140

https://bugzilla.xamarin.com/show_bug.cgi?id=42351

https://bugzilla.xamarin.com/show_bug.cgi?id=60248

https://bugzilla.xamarin.com/show_bug.cgi?id=60392

所以我出去设计了一种变通方法,该方法对于我们使用带有一些自定义更改的Label和Stack布局似乎很好:

  public class CustomButton: Label   
  {
    public static readonly BindableProperty CommandProperty =
        BindableProperty.Create("Command", typeof(ICommand), typeof(CustomButton), null);

    public static readonly BindableProperty CommandParameterProperty =
        BindableProperty.Create("CommandParameter", typeof(object), typeof(CustomButton), null);

    public event EventHandler ItemTapped = ( e, a ) => { };

    public CustomButton()
    {
        Initialize();
    }

    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }

    public object CommandParameter
    {
        get { return GetValue(CommandParameterProperty); }
        set { SetValue(CommandParameterProperty, value); }
    }

    private ICommand TransitionCommand
    {
        get
        {
            return new Command(async () =>
            {
                AnchorX=0.48;
                AnchorY=0.48;
                await this.ScaleTo(0.8, 50, Easing.Linear);
                await Task.Delay(100);
                await this.ScaleTo(1, 50, Easing.Linear);
                Command?.Execute(CommandParameter);

                ItemTapped(this, EventArgs.Empty);
            });
        }
    }

    public void Initialize()
    {
        GestureRecognizers.Add(new TapGestureRecognizer
        {
            Command=TransitionCommand
        });
    }
}

我还添加了一些动画,使它具有按钮的感觉。

然后按以下方式使用此标签:

 <StackLayout BackgroundColor="Black" Padding="1"> // Here padding will be the border size you want and background color will be the color for it 
      <nameSpace:CustomButton XAlign="Center" BackgroundColor="Blue" /> //Height and Width request is mandatory here
 </StackLayout>

此解决方案的唯一问题是您无法添加边界半径。