XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2017/02/05

Xamarin FAQ 2-005 : 如何隱藏導航工具列上的按鈕動態

問題

當您在使用 ToolbarItem 工具列按鈕控制項時候,想要將這個按鈕隱藏起來,這個時候,您會發現到,在 ToolbarItem 找不到 IsVisible 屬性。但是,您想要依據當時應用程式的狀態,動態的隱藏或者顯示某些工具列,這樣的需求該如何設計呢?

解答

這裡有個解決方案,那就是您可以客製控制項(Custom Contron),也就是產生一個類別,並且繼承 ToolbarItem 這個類別;在新產生的類別中,宣告一個可綁定屬性 IsVisibleProperty,在這個可綁定屬性中的 propertyChanged 事件中,就可以動態的新增或者移除這個 ToolbarItem 按鈕了。
在底下的 XAML 頁面工具列宣告中,定義了一個 Xamarin.Forms 的 ToolbarItem 工具列按鈕,與兩個客製化工具列按鈕(記得要使用命名空間前置詞,才能夠引用這個客製化工具列控制項),並且透過設定 顯示工具列按鈕 屬性,來控制工具列按鈕是否會被從 ToolbarItems 集合物件中加入或者移除。
    <ContentPage.ToolbarItems>
        <ToolbarItem
            Text="{Binding 切換按鈕名稱}" 
            Command="{Binding 顯示工具列Command}" />
        <controls:HideableToolbarItem 
            Text="刪除"
            Command="{Binding 刪除Command}" 
            IsVisible="{Binding 顯示工具列按鈕}" 
            Parent="{x:Reference ThisPage}" />
        <controls:HideableToolbarItem 
            Text="匯出" 
            Command="{Binding 匯出Command}" 
            IsVisible="{Binding 顯示工具列按鈕}" 
            Parent="{x:Reference ThisPage}" />
    </ContentPage.ToolbarItems>
底下為當 IsVisible 屬性值有所變動的時候,工具列按鈕物件會從 ToolbarItems 集合物件內,動態加入或者移除
        private static void OnIsVisibleChanged(BindableObject bindable, object oldVal, object newVal)
        {
            var item = bindable as HideableToolbarItem;
            bool oldvalue = (bool)oldVal;
            bool newvalue = (bool)newVal;

            if (item.Parent == null)
                return;

            var items = item.Parent.ToolbarItems;

            if (newvalue && !items.Contains(item))
            {
                items.Add(item);
            }
            else if (!newvalue && items.Contains(item))
            {
                items.Remove(item);
            }
        }
Xamarin-跨平台手機應用程式設計入門-粉絲團

沒有留言:

張貼留言