XAML Yükleme ve Bağımlılık Özellikleri

XAML işlemcisinin geçerli WPF uygulaması doğal olarak bağımlılık özelliğinin farkındadır. WPF XAML işlemcisi, bağımlılık özellikleri olan ikili XAML ve işleme özniteliklerini yüklerken bağımlılık özellikleri için özellik sistemi yöntemlerini kullanır. Bu, özellik sarmalayıcılarını etkili bir şekilde atlar. Özel bağımlılık özellikleri uyguladığınızda, bu davranışı hesaba katmalısınız ve özellik sistem yöntemleri ve SetValuedışında özellik sarmalayıcınıza başka kod yerleştirmekten GetValue kaçınmanız gerekir.

Önkoşullar

Bu konuda, hem tüketici hem de yazar olarak bağımlılık özelliklerini anladığınız ve Bağımlılık Özelliklerine Genel Bakış ve Özel Bağımlılık Özellikleri'ni okuduğunuz varsayılır. Ayrıca WPF ve XAML Söz Diziminde XAML'i ayrıntılı olarak okumanız gerekir.

WPF XAML YükleyiciSi Uygulaması ve Performansı

Uygulama nedenleriyle, bir özelliği bağımlılık özelliği olarak tanımlamak ve özellik sarmalayıcısını ve ayarlayıcısını kullanmak yerine bunu ayarlamak için özellik sistemi SetValue yöntemine erişmek hesaplama açısından daha ucuzdur. Bunun nedeni, bir XAML işlemcisinin yalnızca işaretlemenin yapısı ve çeşitli dizeler tarafından belirtilen tür ve üye ilişkilerini bilerek yedekleme kodunun nesne modelinin tamamını çıkarması gerekir.

Türü xmln'ler ve derleme özniteliklerinin bir bileşimi aracılığıyla aranıyor, ancak üyeleri tanımlayarak, hangilerinin öznitelik olarak ayarlanmasını destekleyebileceğini belirleyerek ve özellik değerleri desteğinin hangi tür türlerinin çözümlenmesi için kullanarak PropertyInfokapsamlı yansıma gerektirebilir. Belirli bir türdeki bağımlılık özelliklerine özellik sistemi aracılığıyla depolama tablosu olarak erişilebildiği için, XAML işlemcisinin WPF uygulaması bu tabloyu kullanır ve bağımlılık özelliği tanımlayıcısı ABCProperty kullanılarak türetilmiş türü çağırarak SetValue belirli bir özellik ABC'sinin DependencyObject daha verimli bir şekilde ayarlanabileceğini çıkarsar.

Özel Bağımlılık Özellikleri için Etkileri

Özellik ayarı için XAML işlemci davranışının geçerli WPF uygulaması sarmalayıcıları tamamen atladığı için, özel bağımlılık özelliğiniz için sarmalayıcının ayarlanan tanımlarına herhangi bir ek mantık yerleştirmemelisiniz. Böyle bir mantığı küme tanımına koyarsanız, özellik kod yerine XAML'de ayarlandığında mantık yürütülmeyecektir.

Benzer şekilde, XAML işlemcisinin XAML işlemeden özellik değerleri alan diğer yönleri de sarmalayıcıyı kullanmak yerine kullanır GetValue . Bu nedenle, tanımında get çağrının ötesinde GetValue herhangi bir ek uygulamadan da kaçınmanız gerekir.

Aşağıdaki örnek, sarmalayıcılarla önerilen bir bağımlılık özelliği tanımıdır; burada özellik tanımlayıcısı bir public static readonly alan olarak depolanır ve get ve set tanımları bağımlılık özelliği yedeklemesini tanımlayan gerekli özellik sistemi yöntemlerinin ötesinde kod içermez.


public static readonly DependencyProperty AquariumGraphicProperty = DependencyProperty.Register(
  "AquariumGraphic",
  typeof(Uri),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(null,
      FrameworkPropertyMetadataOptions.AffectsRender,
      new PropertyChangedCallback(OnUriChanged)
  )
);
public Uri AquariumGraphic
{
  get { return (Uri)GetValue(AquariumGraphicProperty); }
  set { SetValue(AquariumGraphicProperty, value); }
}

Public Shared ReadOnly AquariumGraphicProperty As DependencyProperty = DependencyProperty.Register("AquariumGraphic", GetType(Uri), GetType(AquariumObject), New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.AffectsRender, New PropertyChangedCallback(AddressOf OnUriChanged)))
Public Property AquariumGraphic() As Uri
    Get
        Return CType(GetValue(AquariumGraphicProperty), Uri)
    End Get
    Set(ByVal value As Uri)
        SetValue(AquariumGraphicProperty, value)
    End Set
End Property

Ayrıca bkz.