Xamarin.Forms
SearchBar
是用來起始搜尋的使用者輸入控制項。 控制項
SearchBar
支援預留位置文字、查詢輸入、搜尋執行和取消。 下列螢幕擷取畫面顯示查詢
SearchBar
,其中包含 中
ListView
顯示的結果:
螢幕擷取畫面
類別
SearchBar
會定義下列屬性:
CancelButtonColor
是定義
Color
取消按鈕色彩的 。
CharacterSpacing
類型
double
為 的 ,是文字字元
SearchBar
之間的間距。
FontAttributes
是
FontAttributes
列舉值,可判斷字型是否
SearchBar
為粗體、斜體或兩者皆非。
FontFamily
是 ,
string
可決定 所使用的
SearchBar
字型系列。
FontSize
可以是
NamedSize
列舉值或
double
值,代表跨平臺的特定字型大小。
HorizontalTextAlignment
是
TextAlignment
定義查詢文字水準對齊的列舉值。
VerticalTextAlignment
是
TextAlignment
定義查詢文字垂直對齊的列舉值。
Placeholder
string
是定義預留位置文字的 ,例如 「Search...」。
PlaceholderColor
是 ,
Color
定義預留位置文字的色彩。
SearchCommand
是 ,
ICommand
可對 ViewModel 上定義的命令系結使用者動作,例如手指點選或點選。
SearchCommandParameter
是 ,
object
指定應該傳遞至 的參數
SearchCommand
。
Text
是 ,
string
其中包含 中的
SearchBar
查詢文字。
TextColor
Color
是定義查詢文字色彩的 。
TextTransform
是決定
TextTransform
文字大小寫的值
SearchBar
。
這些屬性是由
BindableProperty
物件所支援,這表示
SearchBar
可以自訂 ,並成為資料系結的目標。 在 上
SearchBar
指定字型屬性與自訂其他
Xamarin.Forms Text 控制項上的文字
一致。 如需詳細資訊,請參閱
中的字型 Xamarin.Forms
。
建立 SearchBar
SearchBar
可以在 XAML 中具現化 。 其選擇性
Placeholder
屬性可以設定為在查詢輸入方塊中定義提示文字。 的
Placeholder
預設值是空字串,因此如果未設定預留位置,就不會顯示任何預留位置。 下列範例示範如何使用選擇性
Placeholder
屬性集在 XAML 中具現化
SearchBar
:
<SearchBar Placeholder="Search items..." />
SearchBar
也可以在程式碼中建立 :
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
SearchBar 外觀屬性
控制項 SearchBar
會定義許多可自訂控制面板的屬性。 下列範例示範如何在 XAML 中具現化 SearchBar
,並指定多個屬性:
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
在程式碼中建立 SearchBar
物件時,也可以指定這些屬性:
SearchBar searchBar = new SearchBar
Placeholder = "Search items...",
PlaceholderColor = Color.Orange,
TextColor = Color.Orange,
TextTransform = TextTransform.Lowercase,
HorizontalTextAlignment = TextAlignment.Center,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(SearchBar)),
FontAttributes = FontAttributes.Italic
下列螢幕擷取畫面顯示產生的 SearchBar
控制項:
在 iOS 上,類別 SearchBarRenderer
包含可 UpdateCancelButton
覆寫的方法。 這個方法可控制取消按鈕何時出現,而且可以在自訂轉譯器中覆寫。 如需自訂轉譯器的詳細資訊,請參閱Xamarin.Forms 自訂轉譯器。
藉由將事件處理常式附加至下列其中一個事件,即可使用 SearchBar
控制項來執行搜尋:
SearchButtonPressed
當使用者按一下搜尋按鈕或按下 Enter 鍵時,就會呼叫 。
TextChanged
每當查詢方塊中的文字變更時,就會呼叫 。
下列範例顯示附加至 TextChanged
XAML 中事件的事件處理常式,並使用 ListView
來顯示搜尋結果:
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
事件處理常式也可以附加至 SearchBar
程式碼中建立的 :
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
程式 TextChanged
代碼後置檔案中的事件處理常式相同,無論是 SearchBar
透過 XAML 或程式碼建立:
void OnTextChanged(object sender, EventArgs e)
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
上一個 DataService
範例表示類別是否存在,其 GetSearchResults
方法能夠傳回符合查詢的專案。 控制項 SearchBar
的 Text
屬性值會傳遞至 GetSearchResults
方法,而結果會用來更新 ListView
控制項的 ItemsSource
屬性。 整體效果是搜尋結果會顯示在 控制項中 ListView
。
範例應用程式提供 DataService
可用來測試搜尋功能的類別實作。
藉由將 和 SearchCommandParameter
屬性系結 SearchCommand
至 ICommand
實作,即可在沒有事件處理常式的情況下執行搜尋。 範例專案會使用 Model-View-ViewModel (MVVM) 模式來示範這些實作。 如需使用 MVVM 進行資料系結的詳細資訊,請參閱 使用 MVVM 的資料系結。
範例應用程式中的 viewmodel 包含下列程式碼:
public class SearchViewModel : INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public ICommand PerformSearch => new Command<string>((string query) =>
SearchResults = DataService.GetSearchResults(query);
private List<string> searchResults = DataService.Fruits;
public List<string> SearchResults
return searchResults;
searchResults = value;
NotifyPropertyChanged();
ViewModel 假設有能夠執行搜尋的 DataService
類別。 範例應用程式中提供類別 DataService
,包括範例資料。
下列 XAML 示範如何將 系結 SearchBar
至範例 viewmodel,以及 ListView
顯示搜尋結果的控制項:
<ContentPage ...>
<ContentPage.BindingContext>
<viewmodels:SearchViewModel />
</ContentPage.BindingContext>
<StackLayout ...>
<SearchBar x:Name="searchBar"
SearchCommand="{Binding PerformSearch}"
SearchCommandParameter="{Binding Text, Source={x:Reference searchBar}}"/>
<ListView x:Name="searchResults"
ItemsSource="{Binding SearchResults}" />
</StackLayout>
</ContentPage>
本範例會將 設定 BindingContext
為 類別的 SearchViewModel
實例。 它會將 SearchCommand
屬性系結至 ICommand
PerformSearch
ViewModel 中的 ,並將 屬性系結 SearchBar
Text
至 SearchCommandParameter
屬性。 屬性 ListView.ItemsSource
系結至 SearchResults
ViewModel 的 屬性。
如需介面和系結的詳細資訊 ICommand
,請參閱Xamarin.Forms 資料系結和ICommand 介面。
SearchBar 示範
Xamarin.Forms 文字控制項
中的字型 Xamarin.Forms
Xamarin.Forms 資料系結