Как включить представление в NavigationBar Xamarin Forms?

Мне требуется ваша помощь !

Я работаю над проектом мобильной разработки, кроссплатформенным. Я использую Visual Studio с Xamarin Forms. У меня есть SearchBar (класс Xamarin.Forms), но моя проблема заключается в том, чтобы включить его в NavigationBar.

В настоящее время у меня есть MasterDetailPage, и я запускаю this.Detail с новой NavigationPage (new customPage()). У меня тоже есть рендеринг SearchBar. Итак, мне нужен оригинальный NavigationBar (я хочу сохранить кнопку возврата), но я хотел бы добавить внутрь SearchBar.

Я был бы очень признателен, если бы вы знали, как это сделать, особенно для Android. Заранее спасибо !


person R.Extrant    schedule 25.04.2016    source источник


Ответы (1)


Вам нужно создать собственный NavigationRenderer и вставить свой собственный UISearchBar в UIToolbar или SearchView в ViewGroup:

Xamarin Forms: базовые классы средства визуализации и собственные элементы управления

В качестве примера вставки iOS UISearchBar в панель навигации с помощью пользовательского NavigationRenderer:

введите здесь описание изображения

Примечание. Чтобы не связывать вещи, использование MessagingCenter позволяет вам перекачивать сообщения без какой-либо жесткой зависимости событий в пользовательском рендерере.

[assembly:ExportRenderer (typeof(NavigationPage), typeof(SeachBarNavigationRender))]
namespace Forms.Life.Cycle.iOS
{
    public class SeachBarNavigationRender : NavigationRenderer
    {
        public SeachBarNavigationRender () : base()
        {
        }

        public override void PushViewController (UIViewController viewController, bool animated)
        {
            base.PushViewController (viewController, animated);
            List<UIBarButtonItem> toolbarItem = new List<UIBarButtonItem> ();
            foreach (UIBarButtonItem barButtonItem in TopViewController.NavigationItem.RightBarButtonItems) {
                if ( barButtonItem.Title.Contains( "search")) {
                    UISearchBar search = new UISearchBar (new CGRect (0, 0, 200, 25));
                    search.BackgroundColor = UIColor.LightGray;
                    search.SearchBarStyle = UISearchBarStyle.Prominent;
                    search.TextChanged += (object sender, UISearchBarTextChangedEventArgs e) => {
                        D.WriteLine(e.SearchText);
                        MessagingCenter.Send<object, string> (this, "SearchText", e.SearchText);
                    };
                    barButtonItem.CustomView = search;
                }
                toolbarItem.Add (barButtonItem);
            }
            TopViewController.NavigationItem.RightBarButtonItems = toolbarItem.ToArray ();
        }
    }
}
person SushiHangover    schedule 25.04.2016
comment
У вас есть код, чтобы заставить это работать в пользовательском рендерере Android? :) - person jdstaerk; 20.10.2016