如何在iOS中设置Xamarin.Forms SearchBar的样式?

迈克尔·库克

我正在尝试设置Xamarin.Forms SearchBar的样式,并且可以看到存在BackgroundColor属性,但是无论设置什么,该属性在iOS中都会被忽略。

甚至可以在iOS中自定义Xamarin.Forms SearchBar(以及如何)?

迈克尔·库克

据我所知,Xamarin.Forms不具有实现BackgroundColor属性的属性,或者它已损坏。最接近真实背景颜色的UISearchBar属性是BarTint,它不是XForms设置的。

为了解决这个问题,我认真考虑了这些注释,并使用自定义渲染器创建了自己的自定义SearchBar,以扩展BarTint属性以及我想要的其他一些功能。

注意:为了使用自定义渲染器,请确保您已更新到Xamarin.Forms 1.1.1.6206或更高版本。要更新平台版本,请使用Visual Studio中的NuGet或XamarinStudio中的内置程序包管理器。

您将需要两个类,第一个是CustomSearchBar,UI将使用它来保存自定义属性。它放在共享或可移植的类库中。

using Xamarin.Forms;

namespace App1
{
    public class CustomSearchBar : SearchBar
    {
        // Use Bindable properties to maintain XAML binding compatibility

        public static readonly BindableProperty BarTintProperty = BindableProperty.Create<CustomSearchBar, Color?>(p => p.BarTint, null);
        public Color? BarTint
        {
            get { return (Color?)GetValue(BarTintProperty); }
            set { SetValue(BarTintProperty, value); }
        }

        public static readonly BindableProperty SearchStyleProperty = BindableProperty.Create<CustomSearchBar, string>(p => p.SearchStyle, "Default");
        public string SearchStyle
        {
            get { return (string)GetValue(SearchStyleProperty); }
            set { SetValue(SearchStyleProperty, value); }
        }

        public static readonly BindableProperty BarStyleProperty = BindableProperty.Create<CustomSearchBar, string>(p => p.BarStyle, "Default");
        public string BarStyle
        {
            get { return (string)GetValue(BarStyleProperty); }
            set { SetValue(BarStyleProperty, value); }
        }

    }
}

第二类是自定义渲染器本身,它可以访问本机UISearchButton控件。此类进入iOS项目:

using System;
using System.Drawing;
using App1;
using App1.iOS;
using MonoTouch.UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRendererAttribute(typeof(CustomSearchBar), typeof(CustomSearchBarRenderer))]
namespace App1.iOS
{
    public class CustomSearchBarRenderer : SearchBarRenderer
    {
        // There might be a better place for this, but I don't know where it is
        public override void Draw(RectangleF rect)
        {
            var csb = (CustomSearchBar) Element;
            if (csb.BarTint != null)
                Control.BarTintColor = csb.BarTint.GetValueOrDefault().ToUIColor();
            Control.BarStyle = (UIBarStyle)Enum.Parse(typeof(UIBarStyle), csb.BarStyle);
            Control.SearchBarStyle = (UISearchBarStyle)Enum.Parse(typeof(UISearchBarStyle), csb.BarStyle);

            base.Draw(rect);
        }
    }
}

代码有点粗糙,但希望您能理解。

另外一些注意事项:

  • 没有ExportRendererAttribute,所有这些都不起作用,因此不要忽略它。
  • 我必须使BarTint可为空(因为默认为null,而Color.Default则为黑色)。
  • 我覆盖了Draw(),尽管从技术上讲我没有画任何东西,因为我不知道将代码放在哪里。Control和Element属性在构造函数中不可用。如果找到更好的解决方案,我将尝试更新此示例。
  • 我将字符串用于Enum属性,但是将来可能会得到改善。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Xamarin.Forms:创建SearchBar

来自分类Dev

Xamarin Forms Searchbar iOS 13忽略背景色

来自分类Dev

Xamarin Forms Shell ItemTemplate样式

来自分类Dev

如何在 App.xaml Xamarin Forms for CustomButton 中定义样式?

来自分类Dev

如何在 ios 中设置 Xamarin.forms 标签页未选中的图标和文本颜色

来自分类Dev

如何在Xamarin.Forms中设置控件的宽度

来自分类Dev

Xamarin.Forms:如何在XAML中设置BindingContext?

来自分类Dev

Xamarin.Forms:创建一个SearchBar

来自分类Dev

如何在iOS中设置GCKUIMiniMediaControlsViewController的样式?

来自分类Dev

设置一个EntryCell Xamarin Forms Android的样式

来自分类Dev

如何在iOS的Xamarin Forms中创建导航栏?

来自分类Dev

如何在 Xamarin Forms for iOS 中实现长按?

来自分类Dev

IOS 上的 Xamarin.Forms:删除 SearchBar 和 NavigationBar 之间的空间

来自分类Dev

将样式应用于Xamarin.Forms中的iOS自定义渲染器

来自分类Dev

Xamarin.Forms中的属性更改时,不会更新SearchBar.IsEnabled绑定

来自分类Dev

如何在Xamarin Forms中设置jsonview之前获取json对象并将其设置为listview

来自分类Dev

如何在Xamarin.Forms Xaml中设置行/列定义?

来自分类Dev

如何在Xamarin.Forms中存储应用程序设置

来自分类Dev

如何在xamarin.forms中为输入单元格设置左右填充

来自分类Dev

如何在Xamarin.Forms中设置编辑器的高度

来自分类Dev

如何在Xamarin Forms应用程序中设置列出目录的权限

来自分类Dev

如何在Xamarin.Forms中设置不透明度动画

来自分类Dev

如何在 Xamarin.Forms 中设置 ImageCell 周围的边距?

来自分类Dev

如何在 Xamarin.Forms uwp 中设置 webview 的动态高度?

来自分类Dev

Xamarin Forms 弹出菜单底部选项卡样式

来自分类Dev

Xamarin.Forms中的异步任务如何在iOS / Android背景模式下工作

来自分类Dev

如何在Xamarin Forms iOS-App中接收ASPN令牌

来自分类Dev

如何在iOS上的Xamarin.Forms CollectionView中关闭弹跳效果

来自分类Dev

如何在 IOS Xamarin.Forms 中更改浮动 TextField 默认占位符颜色

Related 相关文章

  1. 1

    Xamarin.Forms:创建SearchBar

  2. 2

    Xamarin Forms Searchbar iOS 13忽略背景色

  3. 3

    Xamarin Forms Shell ItemTemplate样式

  4. 4

    如何在 App.xaml Xamarin Forms for CustomButton 中定义样式?

  5. 5

    如何在 ios 中设置 Xamarin.forms 标签页未选中的图标和文本颜色

  6. 6

    如何在Xamarin.Forms中设置控件的宽度

  7. 7

    Xamarin.Forms:如何在XAML中设置BindingContext?

  8. 8

    Xamarin.Forms:创建一个SearchBar

  9. 9

    如何在iOS中设置GCKUIMiniMediaControlsViewController的样式?

  10. 10

    设置一个EntryCell Xamarin Forms Android的样式

  11. 11

    如何在iOS的Xamarin Forms中创建导航栏?

  12. 12

    如何在 Xamarin Forms for iOS 中实现长按?

  13. 13

    IOS 上的 Xamarin.Forms:删除 SearchBar 和 NavigationBar 之间的空间

  14. 14

    将样式应用于Xamarin.Forms中的iOS自定义渲染器

  15. 15

    Xamarin.Forms中的属性更改时,不会更新SearchBar.IsEnabled绑定

  16. 16

    如何在Xamarin Forms中设置jsonview之前获取json对象并将其设置为listview

  17. 17

    如何在Xamarin.Forms Xaml中设置行/列定义?

  18. 18

    如何在Xamarin.Forms中存储应用程序设置

  19. 19

    如何在xamarin.forms中为输入单元格设置左右填充

  20. 20

    如何在Xamarin.Forms中设置编辑器的高度

  21. 21

    如何在Xamarin Forms应用程序中设置列出目录的权限

  22. 22

    如何在Xamarin.Forms中设置不透明度动画

  23. 23

    如何在 Xamarin.Forms 中设置 ImageCell 周围的边距?

  24. 24

    如何在 Xamarin.Forms uwp 中设置 webview 的动态高度?

  25. 25

    Xamarin Forms 弹出菜单底部选项卡样式

  26. 26

    Xamarin.Forms中的异步任务如何在iOS / Android背景模式下工作

  27. 27

    如何在Xamarin Forms iOS-App中接收ASPN令牌

  28. 28

    如何在iOS上的Xamarin.Forms CollectionView中关闭弹跳效果

  29. 29

    如何在 IOS Xamarin.Forms 中更改浮动 TextField 默认占位符颜色

热门标签

归档