添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Xamarin.Forms SearchBar 是用來起始搜尋的使用者輸入控制項。 控制項 SearchBar 支援預留位置文字、查詢輸入、搜尋執行和取消。 下列螢幕擷取畫面顯示查詢 SearchBar ,其中包含 中 ListView 顯示的結果:

螢幕擷取畫面 :iOS 上的 SearchBar 和 iOS 和 Android

類別 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 可以在 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 方法能夠傳回符合查詢的專案。 控制項 SearchBarText 屬性值會傳遞至 GetSearchResults 方法,而結果會用來更新 ListView 控制項的 ItemsSource 屬性。 整體效果是搜尋結果會顯示在 控制項中 ListView

    範例應用程式提供 DataService 可用來測試搜尋功能的類別實作。

    使用 ViewModel 執行搜尋

    藉由將 和 SearchCommandParameter 屬性系結 SearchCommandICommand 實作,即可在沒有事件處理常式的情況下執行搜尋。 範例專案會使用 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 中的 ,並將 屬性系結 SearchBarTextSearchCommandParameter 屬性。 屬性 ListView.ItemsSource 系結至 SearchResults ViewModel 的 屬性。

    如需介面和系結的詳細資訊 ICommand ,請參閱Xamarin.Forms 資料系結ICommand 介面

  • SearchBar 示範
  • Xamarin.Forms 文字控制項
  • 中的字型 Xamarin.Forms
  • Xamarin.Forms 資料系結
  •