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 屬性系結至 ICommandPerformSearch ViewModel 中的 ,並將 屬性系結 SearchBarText 至 SearchCommandParameter 屬性。 屬性 ListView.ItemsSource 系結至 SearchResults ViewModel 的 屬性。
如需介面和系結的詳細資訊 ICommand ,請參閱Xamarin.Forms 資料系結和ICommand 介面。
SearchBar 示範
Xamarin.Forms 文字控制項
中的字型 Xamarin.Forms
Xamarin.Forms 資料系結