Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.
Tetikleyiciler ve davranışlar benzerdir, bu nedenle her ikisi de veri bağlamalarının kullanımının ötesinde öğe etkileşimlerini basitleştirmek ve XAML öğelerinin işlevselliğini genişletmek için XAML dosyalarında kullanılmaya yöneliktir. Hem tetikleyiciler hem de davranışlar neredeyse her zaman görsel kullanıcı arabirimi nesneleriyle kullanılır.
Tetikleyicileri ve davranışları desteklemek için hem hem de VisualElement Style iki koleksiyon özelliğini destekler:
VisualElement.TriggersveStyle.TriggerstürüIList<TriggerBase>VisualElement.BehaviorsveStyle.BehaviorstürüIList<Behavior>
Tetikleyiciler
Tetikleyici, yanıt (başka bir özellik değişikliği veya bir kod çalıştırma) ile sonuçlayan bir koşuldur (özellik değişikliği veya olay tetikleme). Triggers ve Style özelliği VisualElement türündedirIList<TriggersBase>. TriggerBase , dört korumalı sınıfın türetildiği soyut bir sınıftır:
Triggerözellik değişikliklerine dayalı yanıtlar içinEventTriggerolay tetiklemelerine dayalı yanıtlar içinDataTriggerveri bağlamalarına dayalı yanıtlar içinMultiTriggerbirden çok tetikleyiciye dayalı yanıtlar için
Tetikleyici her zaman, özelliği tetikleyici tarafından değiştirilen öğesinde ayarlanır.
En basit tetikleyici
sınıfı bir Trigger özellik değeri değişikliğini denetler ve aynı öğenin başka bir özelliğini ayarlayarak yanıt verir.
Trigger üç özelliği tanımlar:
PropertytürüBindablePropertyValuetürüObjectSetterstüründeIList<SetterBase>, içerik özelliğiTrigger
Ayrıca, Trigger aşağıdaki özelliğin öğesinden TriggerBase devralınmış olmasını gerektirir:
TargetTypeöğesinin bağlı olduğuTriggeröğenin türünü belirtmek için
Property ve Value koşulunu oluşturur ve Setters koleksiyon ise yanıttır. Belirtilen Property değeri tarafından Valuegösterildiğinde, koleksiyondaki Setter Setters nesneler uygulanır. Property farklı bir değere sahip olduğunda, ayarlayıcılar kaldırılır. Setter öğesinin ilk iki özelliğiyle aynı olan iki özelliği Triggertanımlar:
EntryPop örneği, öğesine uygulanan Entry öğesinin özelliği Entry olduğunda IsFocused trueözelliği aracılığıyla Scale öğesinin Entry boyutunu nasıl Trigger artırabileceğini gösterir.
Yaygın olmasa da, Trigger EntryPopCode örneğinde gösterildiği gibi kodda ayarlanabilir.
StyledTriggers örneği, içinde birden çok Entry öğeye uygulanacak şekilde nasıl ayarlanabileceğini Style gösterirTrigger.
Tetikleyici eylemleri ve animasyonları
Tetikleyiciye dayalı küçük bir kod çalıştırmak da mümkündür. Bu kod, bir özelliği hedefleyen bir animasyon olabilir. Yaygın yollardan biri, iki özelliği tanımlayan bir EventTriggerkullanmaktır:
Eventtüründestring, bir olayın adıActionstüründeIList<TriggerAction>, yanıt olarak çalıştırılacak eylemlerin listesi.
Bunu kullanmak için, genellikle TriggerAction<VisualElement>öğesinden TriggerAction<T>türetilen bir sınıf yazmanız gerekir. Bu sınıftaki özellikleri tanımlayabilirsiniz. Bunlar, 'den BindableObjecttüretilmez çünkü TriggerAction bağlanabilir özellikler yerine düz CLR özellikleridir. Eylem çağrıldığında çağrılan yöntemi geçersiz kılmanız Invoke gerekir. Bağımsız değişken hedef öğedir.
Book.Toolkit kitaplığındakiXamarin.Forms sınıf bir örnektir. ScaleAction Bir öğenin özelliğine animasyon Scale eklemek için özelliğini çağırırScaleTo. Özelliklerinden biri türünde EasingEasingConverter olduğundan, sınıfı XAML'de standart Easing statik alanları kullanmanıza olanak tanır.
EntrySwell örneği, ve Unfocused olaylarını izleyen Focused nesnelerden EventTrigger öğesinin nasıl çağrıldığını ScaleAction gösterir.
CustomEasingSwell örneği, arka planda kod dosyası içinde için ScaleAction özel bir kolaylaştırma işlevinin nasıl tanımlanacağı gösterilir.
Eylemleri bir kullanarak Trigger da çağırabilirsiniz (birbirinden EventTriggerayrı olarak). Bu, iki koleksiyonu tanımlayan farkında TriggerBase olmanız gerekir:
EnterActionstürüIList<TriggerAction>ExitActionstürüIList<TriggerAction>
EnterExitSwell örneği, bu koleksiyonların nasıl kullanılacağını gösterir.
Diğer olay tetikleyicileri
Book.Toolkit kitaplığındakiXamarin.Forms sınıf ölçeği büyütmek ve küçültmek için iki kez çağırır.ScaleTo ScaleUpAndDownAction ButtonGrowth örneği, bir tuşuna basıldığında görsel geri bildirim sağlamak için bunu stilli EventTrigger olarak Button kullanır. Bu çift animasyon, tür koleksiyonunda iki eylem kullanılarak da mümkündür DelayedScaleAction
ShiverAction Book.Toolkit kitaplığındaki Xamarin.Formssınıf, özelleştirilebilir bir titreme eylemi tanımlar. ShiverButtonDemo örneği bunu gösterir.
NumericValidationAction Book.Toolkit kitaplığındaki Xamarin.Formssınıfı öğelerle Entry sınırlıdır ve özelliği bir doubledeğilse özelliği kırmızı olarak Text ayarlarTextColor. TriggerEntryValidation örneği bunu gösterir.
Veri tetikleyicileri
DataTrigger değerine benzerTrigger, ancak değer değişiklikleri için bir özelliği izlemek yerine bir veri bağlamasını izler. Bu, bir öğedeki özelliğin başka bir öğedeki bir özelliği etkilemesine olanak tanır.
DataTrigger üç özelliği tanımlar:
GenderColors örneği SchoolOfFineArt kitaplığını gerektirir ve özelliğine göre Sex öğrencilerin adlarının renklerini mavi veya pembe olarak ayarlar:
ButtonEnabler örneği, özelliğinin Entry özelliği Entry Text 0'a False eşitse Length değerini olarak ayarlarIsEnabled. Özelliğin Text boş bir dizeye başlatıldığına dikkat edin; varsayılan olarak , nullve DataTrigger düzgün çalışmaz.
MultiTrigger'da koşulları birleştirme
MultiTrigger bir koşul koleksiyonudur. Tümü trueolduğunda, ayarlayıcılar uygulanır. sınıfı iki özellik tanımlar:
ConditionstürüIList<Condition>SetterstürüIList<Setter>
Condition soyut bir sınıftır ve iki alt sınıfa sahiptir:
PropertyCondition, veValuegibi özelliklere sahiptirPropertyTriggerBindingCondition, veValuegibi özelliklere sahiptirBindingDataTrigger
AndConditions örneğinde, a BoxView yalnızca dört Switch öğe açık olduğunda renklidir.
OrConditions örneği, dört Switch öğeden herhangi biri açık olduğunda nasıl renk oluşturabileceğinizi BoxView gösterir. Bunun için De Morgan Yasası'nın uygulanması ve tüm mantığın tersine çevirmesi gerekir.
AND ve OR mantığını birleştirmek o kadar kolay değildir ve genellikle ara sonuçlar için görünmez Switch öğeler gerektirir. XorConditions örneği, iki Entry öğeden birinde metin yazıldıysa, ancak her ikisinde de metin yazıldıysa etkinleştirilebileceğini gösterirButton.
Davranışlar
Tetikleyiciyle yapabileceğiniz her şeyi bir davranışla da yapabilirsiniz, ancak davranışlar her zaman aşağıdaki iki yöntemden Behavior<T> türetilen ve geçersiz kılan bir sınıf gerektirir:
Bağımsız değişken, davranışın eklendiği öğedir. Yöntemi genellikle OnAttachedTo bazı olay işleyicileri ekler ve OnDetachingFrom bunları ayırır. Böyle bir sınıf genellikle bazı durumları kaydettiği için, genellikle içinde Stylepaylaşılamaz.
BehaviorEntryValidation örneği TriggerEntryValidation'a benzer, ancak bir davranış kullanır( NumericValidationBehavior Book.Toolkit kitaplığındaki Xamarin.Formssınıf).
Özelliklere sahip davranışlar
Behavior<T>, 'den BehaviorBindableObjecttüretilir, bu nedenle bağlanabilir özellikler bir davranışta tanımlanabilir. Bu özellikler veri bağlamalarında etkin olabilir.
Bu, Book.Toolkit kitaplığındaki sınıfıXamarin.Forms kullanan ValidEmailBehavior EmailValidationDemo programında gösterilmiştir. ValidEmailBehavior salt okunur bir bağlanabilir özelliğe sahiptir ve veri bağlamalarında kaynak görevi görür.
EmailValidationConv örneği, bir e-posta adresinin geçerli olduğunu belirten başka bir gösterge türünü görüntülemek için aynı davranışı kullanır.
EmailValidationTrigger örneği, önceki örnekteki bir çeşitlemedir. ButtonGlide, bu davranışla birlikte bir DataTrigger kullanır.
Geçişler ve onay kutuları
Book.Toolkit kitaplığı gibi bir sınıftaki ToggleBehavior Xamarin.Formsiki durumlu düğmenin davranışını kapsüllemek ve ardından iki durumlu düğmenin tüm görsellerini tamamen XAML'de tanımlamak mümkündür.
FormattedTextToggle örneği, iki FormattedString nesne arasında geçiş yaparak bu kavramı genişletir.
ToggleBase Book.Toolkit kitaplığındakiXamarin.Forms sınıfı öğesinden ContentViewtüretilir, bir IsToggled özellik tanımlar ve iki durumlu düğme mantığı için bir ToggleBehavior ekler. Bu, TraditionalCheckBox örneğinde gösterildiği gibi XAML'de iki durumlu düğmeyi tanımlamayı kolaylaştırır.
SwitchCloneDemo öğesinden ToggleBase türetilen bir SwitchClone sınıf içerir ve sınıfını kullanarak TranslateAction öğesine benzeyen Xamarin.FormsSwitchbir iki durumlu düğme oluşturur.
Book.Toolkit içindeki A, LeverToggle örneğinde animasyonlu bir kaldıraç oluşturmak için kullanılan bir animasyon sağlar.RotateActionXamarin.Forms
Dokunmalara yanıt verme
Bunun bir dezavantajı EventTrigger , dokunmalara yanıt vermek için öğesine ekleyememenizdir TapGestureRecognizer . Bu sorunu çözmek Book.Toolkit'in Xamarin.Formsamacıdır TapBehavior
BoxViewTapShiver örneği, dokunulan BoxView öğeler için öncekini ShiverAction kullanmak için kullanırTapBehavior.
ShiverViews örneği, bir ShiverView sınıfı kapsülleyerek işaretlemenin nasıl kesildiğini gösterir.
Radyo düğmeleri
Book.Toolkit kitaplığı, grup RadioBehavior adına göre gruplandırılmış radyo düğmeleri oluşturmak için de bir string sınıfa sahiptir.Xamarin.Forms
RadioLabels programı, radyo düğmesi için metin dizeleri kullanır. RadioStyle örneği, işaretli ve işaretsiz düğmeler arasındaki görünüm farkı için bir Style kullanır. RadioImages örneği, radyo düğmeleri için kutulu görüntüler kullanır:
TraditionalRadios örneği, geleneksel görünen radyo düğmelerini daire içinde bir noktayla çizer.
Soluk ve yönlendirme
Son örnek olan MultiColorSliders, radyo düğmelerini kullanarak üç farklı renk seçimi görünümü arasında geçiş yapmanızı sağlar. Book.Toolkit kitaplığındakiXamarin.Forms bir FadeEnableAction kullanılarak üç görünüm soluk ve soluk görünür.
Program, Book.Toolkit kitaplığında kullanarak GridOrientationBehavior dikey ve yatay arasındaki yönlendirme değişikliklerine Xamarin.Formsde yanıt verir.

