Xamarin.Forms似乎提供了一種稱爲「行爲」的子類化控件的替代方法。爲什麼這首先要求?什麼是優勢,什麼時候我們應該使用它而不是繼承?Xamarin.Forms Behaviors
我正在嘗試的一個可能的原因可能是子類控件無法使用針對其父控件的樣式。但我也不明白這個限制的原因。
Xamarin.Forms似乎提供了一種稱爲「行爲」的子類化控件的替代方法。爲什麼這首先要求?什麼是優勢,什麼時候我們應該使用它而不是繼承?Xamarin.Forms Behaviors
我正在嘗試的一個可能的原因可能是子類控件無法使用針對其父控件的樣式。但我也不明白這個限制的原因。
您可以檢查Xamaron.Forms行爲的文檔,https://developer.xamarin.com/guides/xamarin-forms/behaviors/
注:我不是很確定,我明白你的意思在這裏。
我想到的一個可能的原因可能是子類控件不能使用父級控件定位的樣式。但我也不明白這個限制的原因。
但是,我會盡力回答本段提到的問題。
Xamarin.Forms似乎提供所謂的「行爲」子類化控制的替代方法。爲什麼這首先要求?什麼是優勢,什麼時候我們應該使用它而不是繼承?
正如documentation提到的,行爲使您可以延長控制功能,而無需得到他們。我想這會更有意義實現行爲,而不是子類的控制,在下列情況下:
如果功能可以跨多個控件類型
最簡單的例子是實現最大共享用於控制-length /正則表達式/分鐘長度的驗證支持輸入諸如Entry
,Editor
等
<Entry>
<Entry.Behaviors>
<local:TextBehaviour MaxLength="25" MinLength="2" RegexPattern="[ae]" />
</Entry.Behaviors>
</Entry>
<Editor>
<Editor.Behaviors>
<local:TextBehaviour MaxLength="250" MinLength="2" />
</Editor.Behaviors>
</Editor>
如果功能需要延長用於在現有的代碼庫
例如使用的控制,我們可以擴展,並附加行爲來使用隱式的樣式和附加屬性的各種控制而無需更新在代碼中的每個控制的使用。
<Style TargetType="Label">
<Setter Property="local:ShadowEffect.HasShadow" Value="True" />
</Style>
<Style TargetType="Entry">
<Setter Property="local:Validation.MaxLength" Value="35" />
</Style>
<Style TargetType="Editor">
<Setter Property="local:Validation.MaxLength" Value="250" />
</Style>
這些是我可以在此時想到的情景。如果我再遇到,我會補充更多。
這是一個來自WPF的概念,你可以在this great tutorial page上閱讀更多關於它的內容。
行爲背後的想法是讓交互設計師更靈活地設計複雜的用戶交互而無需編寫任何代碼。
一個行爲的例子是拖&下降,輸入驗證,平移和縮放,元素的 重新定位,等等可能行爲的列表非常長 。
對具有客戶列表的應用程序進行映像並且用戶可以將其中的一些添加到訂戶列表中。通過在每個用戶列表旁邊提供一個「添加」按鈕,可以設計這種交互作用 。但是如果 交互設計師想要添加拖動功能,他需要 與開發人員討論並等到實現完成後才執行 。通過行爲,他只需拖動每個 列表上的拖放行爲,我們就完成了。
因此,在一家公司中,它允許設計人員和開發人員之間有更好的工作流程。
除了已經提到的,另一個原因可能是在運行時切換行爲的可能性。