我正在尝试添加带有背景图像的选择器,因此我使用了相对布局并在相对布局中添加了图像和选择器。 我的问题是我在 IOS 环境中有一个边框,而我在 android 设备中有一个底线。 我在 Normal Entry 中遇到了这个问题并解决了,但我在 picker 中使用了相同的场景不起作用。

这是代码

<RelativeLayout Margin="0,0,0,0"
                                    Padding="0,0,0,0"
                                    >
                        <Image Source="input_mobile_code_brown.png"
                               x:Name="img"

                               RelativeLayout.XConstraint =
                    "{ConstraintExpression Type=RelativeToParent,
                         Property=Width,
                         Factor=0,
                         Constant=0}"
                RelativeLayout.YConstraint =
                    "{ConstraintExpression Type=RelativeToParent,
                         Property=Height,
                         Factor=0,
                         Constant=0}"
                                  RelativeLayout.WidthConstraint =
                    "{ConstraintExpression Type=RelativeToParent,

                         Property=Width,
                         Factor=1,
                         Constant=0}"
               RelativeLayout.HeightConstraint =
                    "{ConstraintExpression Type=RelativeToParent,

                         Property=Height,
                         Factor=1,
                         Constant=0}"
                               />
                        <Picker BackgroundColor="Transparent"
                                x:Name="picker" 
                                Margin="10,0,0,0"

                RelativeLayout.XConstraint =
                    "{ConstraintExpression Type=RelativeToParent,
                         Property=Width,
                         Factor=0,
                         Constant=0}"
                RelativeLayout.YConstraint =
                    "{ConstraintExpression Type=RelativeToParent,
                         Property=Height,
                         Factor=0,
                         Constant=0}"
                RelativeLayout.WidthConstraint =
                    "{ConstraintExpression Type=RelativeToView,
                         ElementName=img,
                         Property=Width,
                         Factor=1,
                         Constant=0}"
               RelativeLayout.HeightConstraint =
                    "{ConstraintExpression Type=RelativeToView,
                         ElementName=img,
                         Property=Height,
                         Factor=1,
                         Constant=0}"
            />
                    </RelativeLayout>
  • 这是结果

在此处输入图片说明

我需要从 IOS 中删除默认边框

所以我在 IOS 中做了一个 customRenderer

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
    base.OnElementChanged(e);
    var view = e.NewElement as CustomPicker;
    this.Control.BorderStyle=  UITextBorderStyle.None;
}

但是IOS中的边框还是没有去掉

#1楼 票数:3

预期答案是

<local:CustomPicker x:Name="modePicker" ...

 public class BorderlessPickerRenderer : PickerRenderer
 {
    public static void Init() { }
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);
        if (e.OldElement == null)
        {
            Control.Background = null;

            var layoutParams = new MarginLayoutParams(Control.LayoutParameters);
            layoutParams.SetMargins(0, 0, 0, 0);
            LayoutParameters = layoutParams;
            Control.LayoutParameters = layoutParams;
            Control.SetPadding(0, 0, 0, 0);
            SetPadding(0, 0, 0, 0);
        }
    }
}

上面的渲染器适用于 Android

对于 iOS -

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);

        Control.Layer.BorderWidth = 0;
        Control.BorderStyle = UITextBorderStyle.None;
    }

对于 UWP -

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            Control.BorderThickness = new Windows.UI.Xaml.Thickness(0);
            Control.Margin = new Windows.UI.Xaml.Thickness(0);
            Control.Padding = new Windows.UI.Xaml.Thickness(0);
        }
    }

#2楼 票数:1

你可以做类似的事情。 适用于 IOS 和 Android。

 <Frame BorderColor="White" WidthRequest="1" IsClippedToBounds="false" HasShadow="false"> <Picker HeightRequest="40" Title="Choose One" /> </Frame>

在您的选择器旁边放置一个任何背景颜色的框架。 这将隐藏选择器周围的边框。 我的恰好是白色的,效果很好。

#3楼 票数:0 已采纳

您只需要像这样在 xaml 中将Picker修改为CustomPicker

<local:CustomPicker BackgroundColor="Transparent" .../>

然后它会工作得很好。

#4楼 票数:0

一个选项是“隐藏”选择器显示按钮,并使用您可以更轻松地设置样式的选项。

<Picker Grid.Row="0" Grid.Column="1" x:Name="DayPicker" Title="" 
HeightRequest="0" WidthRequest="0"     
ItemsSource="{Binding TheDates}" 
ItemDisplayBinding="{Binding text}" SelectedIndexChanged="OnSelectedDateChangeClicket" IsVisible="false">
</Picker>

例如,使用按钮代替

<Button Grid.Row="0" Grid.Column="1" Text="{Binding CurrentDayText}" 
TextColor="White" FontAttributes="Bold" FontSize="16" 
HorizontalOptions="Center" Clicked="OnDateChangeClicket" />

在代码中,我可以显示选择器的选择

void OnDateChangeClicket(object sender, EventArgs e)
{
    DayPicker.Focus();
}

  ask by Victor Faltas translate from so

未解决问题?本站智能推荐:

2回复

Xamarin.iOS 中的 iOS 选择器

我正在尝试在 Xamarin.iOS 中创建一个UIAccessibilityCustomAction 。 这种方法需要name, target, selector作为参数(因为你可以看到这里)。 问题在于selector参数。 在 Xcode(使用 Swift)中,我可以像这样轻松实现它:
1回复

如何在iOS的xamarin Forms Frame中设置虚线边框颜色?

我正在iOS的Xamarin.Forms中做一个应用程序,因此我需要设计下面显示的图像。 为了实现这种设计,我使用了一个框架并为其添加了边框颜色,但是我无法获得上图中指定的虚线边框。 我正在尝试通过自定义渲染器来实现这一点。 任何人都可以请帮助我或指导我获得图像中的确切设计。
1回复

如何从 ViewModel“重置”选择器 - Xamarin iOS 和 MvvmCross

这是 Xamarin iOS 和 MvvmCross。 我在从视图模型重置选择器时遇到问题。 我绑定到选择器的 SelectedItem。 加载视图后,选择器会显示一个占位符: 然后,当我从选择器中选择一个选项时,它会显示所选选项: 无论如何要从viewmodel重置选择器并强制它在启动
3回复

更改日期选择器的样式

我想知道如何更改montouch日期选择器的样式? 我已经设法自定义选择器周围的边框,但是我不确定如何自定义选择器。 任何帮助表示赞赏。 肖恩
2回复

如何隐藏CALayer的边框而不引起iOS中的渲染问题

我将三个UIView依次水平放置,每个UiView.Layer.BorderColor设置为Black,UiView.Layer.BorderWidth设置为0.25f,如下所示。 因此,这为每个视图提供了边框外观。 现在我只需要显示UiViews的水平边框。 因此,我创建了一个
1回复

如何在Visual Studio Xamarin.ios设计器中添加同级视图?

这是我的第一个Xamarion.IOS项目,并且我具有一个具有以下层次结构的视图控制器: 具有“外部”堆栈视图(父级)的View Controller。 该外部堆栈视图应有两个子代: Child1-视图占据了屏幕的前30%,我也设法添加了它,如下所示。 Chi
2回复

更改选择器的文本按钮动作

我的问题很简单,但我不知道是否有可能 我如何更改文本按钮(完成)? 我的Picker图片 它适用于Xamarin Forms。
3回复

上传前关闭图片选择器

因此,我正在将用户的图像上传到我的服务器。 一旦用户在UIImagePickerController选择图像,我将获得以下代码: 除了我希望在上载UploadImage();之前UploadImage();选择器之外,此方法有效UploadImage(); 通话,但要等到上传完成后才