問題
解答
這裡有個解決方案,那就是您可以客製控制項(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);
}
}
ToolbarItem
工具列按鈕控制項時候,想要將這個按鈕隱藏起來,這個時候,您會發現到,在ToolbarItem
找不到IsVisible
屬性。但是,您想要依據當時應用程式的狀態,動態的隱藏或者顯示某些工具列,這樣的需求該如何設計呢?