如何将搜索栏包含在导航页面中
How to include Search Bar in to Navigation Page
所以,我需要将搜索栏包含到导航页面或导航栏中,但我不明白如何以编程方式执行此操作。我可以在 App.cs 中创建搜索栏,但不能将其包含在导航栏中(我在 Xamarin.Forms 中工作,在 ASp.NetCore 中创建 RestApi。请帮助我!
Result in Android.Sdk
protected async override void OnStart(){
HttpResponseMessage response = await client.GetAsync("http://192.168.1.6:5000/api/Events");
if (response.StatusCode == HttpStatusCode.OK)
{
HttpContent responseContent = response.Content;
var json = await responseContent.ReadAsStringAsync();
List<Event> Events = JsonConvert.DeserializeObject<List<Event>>(json);
MainPage page = new MainPage();
StackLayout MyButtons = new StackLayout()
{
Orientation = StackOrientation.Vertical,
HorizontalOptions = LayoutOptions.FillAndExpand,
};
SearchBar search = new SearchBar
{
Placeholder = "Search items...",
PlaceholderColor = Color.Gray,
TextColor = Color.Gray,
HorizontalTextAlignment = TextAlignment.End,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Start,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(SearchBar)),
FontAttributes = FontAttributes.Italic,
};
search.SearchButtonPressed += OnSearchButtonPressed;
Frame FrameSearch = new Frame()
{
BorderColor = Color.Gray,
CornerRadius = 10,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Start,
HeightRequest = 40,
WidthRequest = 180,
HasShadow = true,
Margin = new Thickness(0,10,0,0),
Padding = new Thickness(0),
Content = new StackLayout
{
Padding = 0,
Children =
{
search
}
}
};
MyButtons.Children.Add(FrameSearch);
foreach (var item in Events)
{
var btn = new Button()
{
Text = item.Name, //Whatever prop you wonna put as title;
StyleId = item.EventId.ToString(), //use a property from event as id to be passed to handler
BorderRadius = 50,
FontSize = 30,
BorderColor = Color.Black,
FontAttributes = FontAttributes.Bold,
Margin = new Thickness(2, 5, 2, 0),
Padding = new Thickness(0),
HorizontalOptions = LayoutOptions.FillAndExpand
};
btn.Clicked += OnDynamicBtnClicked;
//Content = new ContentPage()
MyButtons.Children.Add(btn);
}
ScrollView scrollView = new ScrollView();
scrollView.Content = MyButtons;
page.Content = scrollView;
Application.Current.MainPage = new NavigationPage(page);
NavigationPage _Page = Application.Current.MainPage as NavigationPage;
_Page.BarBackgroundColor = Color.FromHex("009688");
你可以设置NavigationPage.TitleView来达到效果。
就像在 c# 代码中一样:
public TitleViewPage()
{
InitializeComponent();
var titleView = new SearchBar { HeightRequest = 44, WidthRequest = 300 };
NavigationPage.SetTitleView(this, titleView);
}
或在xaml中:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NavigationPageTitleView.TitleViewPage">
<NavigationPage.TitleView>
<SearchBar HeightRequest="44" WidthRequest="300" />
</NavigationPage.TitleView>
...
</ContentPage>
所以,我需要将搜索栏包含到导航页面或导航栏中,但我不明白如何以编程方式执行此操作。我可以在 App.cs 中创建搜索栏,但不能将其包含在导航栏中(我在 Xamarin.Forms 中工作,在 ASp.NetCore 中创建 RestApi。请帮助我!
Result in Android.Sdk
protected async override void OnStart(){
HttpResponseMessage response = await client.GetAsync("http://192.168.1.6:5000/api/Events");
if (response.StatusCode == HttpStatusCode.OK)
{
HttpContent responseContent = response.Content;
var json = await responseContent.ReadAsStringAsync();
List<Event> Events = JsonConvert.DeserializeObject<List<Event>>(json);
MainPage page = new MainPage();
StackLayout MyButtons = new StackLayout()
{
Orientation = StackOrientation.Vertical,
HorizontalOptions = LayoutOptions.FillAndExpand,
};
SearchBar search = new SearchBar
{
Placeholder = "Search items...",
PlaceholderColor = Color.Gray,
TextColor = Color.Gray,
HorizontalTextAlignment = TextAlignment.End,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Start,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(SearchBar)),
FontAttributes = FontAttributes.Italic,
};
search.SearchButtonPressed += OnSearchButtonPressed;
Frame FrameSearch = new Frame()
{
BorderColor = Color.Gray,
CornerRadius = 10,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Start,
HeightRequest = 40,
WidthRequest = 180,
HasShadow = true,
Margin = new Thickness(0,10,0,0),
Padding = new Thickness(0),
Content = new StackLayout
{
Padding = 0,
Children =
{
search
}
}
};
MyButtons.Children.Add(FrameSearch);
foreach (var item in Events)
{
var btn = new Button()
{
Text = item.Name, //Whatever prop you wonna put as title;
StyleId = item.EventId.ToString(), //use a property from event as id to be passed to handler
BorderRadius = 50,
FontSize = 30,
BorderColor = Color.Black,
FontAttributes = FontAttributes.Bold,
Margin = new Thickness(2, 5, 2, 0),
Padding = new Thickness(0),
HorizontalOptions = LayoutOptions.FillAndExpand
};
btn.Clicked += OnDynamicBtnClicked;
//Content = new ContentPage()
MyButtons.Children.Add(btn);
}
ScrollView scrollView = new ScrollView();
scrollView.Content = MyButtons;
page.Content = scrollView;
Application.Current.MainPage = new NavigationPage(page);
NavigationPage _Page = Application.Current.MainPage as NavigationPage;
_Page.BarBackgroundColor = Color.FromHex("009688");
你可以设置NavigationPage.TitleView来达到效果。
就像在 c# 代码中一样:
public TitleViewPage()
{
InitializeComponent();
var titleView = new SearchBar { HeightRequest = 44, WidthRequest = 300 };
NavigationPage.SetTitleView(this, titleView);
}
或在xaml中:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NavigationPageTitleView.TitleViewPage">
<NavigationPage.TitleView>
<SearchBar HeightRequest="44" WidthRequest="300" />
</NavigationPage.TitleView>
...
</ContentPage>