Dil

Donatıcılar

Süslemeler, kullanıcıya görsel ipuçları sağlamak için kullanılan özel bir FrameworkElement türüdür. Diğer kullanımlar arasında, Süsleyiciler öğelere işlevsel tutamaçlar eklemek veya bir denetim hakkında durum bilgisi sağlamak için kullanılabilir.

Köşelerde kutuların olduğu süslü metin kutusunu gösteren ekran görüntüsü.

Başlık Description
Adorner'ı Uygulamak Özel donatıcı uygulamasının nasıl oluşturulacağını gösterir.
Bir Öğeye Süsleyici Bağlama Belirli bir kullanıcı arabirimi öğesine bir donatıcı eklemeyi gösterir.
Panelin Çocuk Öğelerini Süsleme Bir panelin tüm çocuk öğelerine nasıl süsleyici uygulanacağını gösterir.
Bir Öğeden Donatıcıyı Kaldırma Bir süsleyicinin program aracılığıyla nasıl kaldırılacağını açıklar.
Öğeden tüm Donatıcıları kaldırma Bir öğedeki tüm süslerin aynı anda nasıl temizleneceğini gösterir.

Stiller ve şablonlar

Adorner sınıfı, şablon bölümlerini veya görsel durumlarını tanımlamayan soyut bir temel sınıftır. Somut süsleyici uygulamaları bu sınıftan devralır ve kendi işleme davranışlarını OnRender yöntemi aracılığıyla tanımlar.

İçerik özelliği

Bu denetim bir içerik özelliği tanımlamaz.

Parçalar

Bu denetim herhangi bir şablon parçası tanımlamaz.

Görsel durumlar

Bu denetim herhangi bir görsel durum tanımlamaz.

Temel kavramlar

WPF çerçevesi içinde süsleme öğeleriyle ilgili temel kavramları anlamak için bu konular hakkında bilgi sahibi olmak gerekir.

Süsleyiciler hakkında

Adorner öğesine bağlı özel bir FrameworkElement, UIElement öğesidir. Süsleyiciler, süslenmiş öğenin veya süslenmiş öğeler koleksiyonunun her zaman üzerinde yer alan bir işleme yüzeyi olan AdornerLayer içinde işlenir. Bir süsleyicinin çizimi, süsleyicinin bağlı olduğu UIElement çiziminden bağımsızdır. Donatıcı genellikle, donatılan öğenin sol üst kısmında bulunan standart 2B koordinat kaynağı kullanılarak bağlandığı öğeye göre konumlandırılır.

Süsleyiciler için yaygın kullanımlar şunlardır:

  • kullanıcının bir UIElement üzerinde işlem yapmasını sağlayan işlevsel tutacaklar ekleme (yeniden boyutlandırma, döndürme, yeniden konumlandırma vb.).
  • Çeşitli durumları belirtmek için veya çeşitli olaylara yanıt olarak görsel geri bildirim sağlayın.
  • Görsel süslemeleri bir UIElement üzerine yerleştir.
  • bir bölümünü veya tamamını UIElementgörsel olarak maskele veya geçersiz kıl.

Adorner çerçeve sınıfları

Windows Presentation Foundation (WPF), görsel öğeleri donatma için temel bir çerçeve sağlar. Aşağıdaki tabloda nesneleri donatırken kullanılan birincil türler ve bunların amacı listelenmiştir:

Class Description
Adorner Tüm somut donatıcı uygulamalarının devraldığı soyut bir temel sınıf.
AdornerLayer Bir veya daha fazla süslü öğenin süsleyicileri için bir işleme katmanını temsil eden sınıf.
AdornerDecorator Bir donatıcı katmanının bir öğe koleksiyonuyla ilişkilendirilmesine olanak tanıyan bir sınıf.

İşleme davranışı

Donatıcıların doğasında yerleşik bir işleme davranışını içermediğini belirtmek önemlidir; bir donatıcının işlem yapabilmesini sağlamak, donatıcıyı uygulayan kişiye aittir. İşleme davranışını uygulamanın yaygın bir yolu, OnRender yöntemini geçersiz kılarak ve süsleyicinin görsellerini istendiği gibi işlemek için bir veya daha fazla DrawingContext nesne kullanmaktır.

Uyarı

Donatıcı katmanına yerleştirilen her şey, ayarladığınız diğer stillerin üzerinde işlenir. Başka bir deyişle, süsleyiciler her zaman görsel olarak üsttedir ve z-order ile değiştirilemez.

Olaylar ve isabet testi

Donatıcılar giriş olaylarını diğer FrameworkElementtüm gibi alır. Donatıcı her zaman donattığı öğeden daha yüksek bir z sırasına sahip olduğundan, donatıcı genellikle temel alınan öğeye yönelik olacak olan giriş olaylarını (örneğin Drop veya MouseMove) alır. Süsleyici, belirli giriş olaylarını dinleyebilir ve olayı tekrar tetikleyerek bunları temel alınan süslenmiş öğeye iletebilir.

Bir donatıcı altındaki öğelerin doğrudan isabet testini etkinleştirmek için, isabet testi IsHitTestVisible özelliğini donatıcıda false olarak ayarlayın. İsabet testi hakkında daha fazla bilgi için bkz. Görsel Katmanında İsabet Testi.

Örnekler

Aşağıdaki örneklerde, yaygın senaryolarda donatıcıların nasıl uygulanıp kullanılacağı gösterilmektedir.

Özel süsleyici uygulama

Windows Presentation Foundation (WPF) tarafından sağlanan donatıcılar çerçevesi öncelikli olarak özel donatıcıların oluşturulmasını desteklemeye yöneliktir. Özel bir süsleyici, soyut Adorner sınıfından türetilen bir sınıfı uygulayarak oluşturulur.

Uyarı

Adorner öğesinin üst öğesi, süslenen öğe değil, Adorner öğesini işleyen AdornerLayer'dir.

Aşağıdaki örnekte basit bir donatıcı uygulayan bir sınıf gösterilmektedir. Örnek donatıcı, bir UIElement öğesinin köşelerini dairelerle süsler.

// Adorners must subclass the abstract base class Adorner.
public class SimpleCircleAdorner : Adorner
{
  // Be sure to call the base class constructor.
  public SimpleCircleAdorner(UIElement adornedElement)
    : base(adornedElement)
  {
  }

  // A common way to implement an adorner's rendering behavior is to override the OnRender
  // method, which is called by the layout system as part of a rendering pass.
  protected override void OnRender(DrawingContext drawingContext)
  {
    Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);

    // Some arbitrary drawing implements.
    SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
    renderBrush.Opacity = 0.2;
    Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5);
    double renderRadius = 5.0;

    // Draw a circle at each corner.
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
  }
}
Public Class SimpleCircleAdorner
    Inherits Adorner
    Sub New(ByVal adornedElement As UIElement)
        MyBase.New(adornedElement)
    End Sub

    Protected Overrides Sub OnRender(ByVal drawingContext As System.Windows.Media.DrawingContext)
        MyBase.OnRender(drawingContext)
        Dim adornedElementRect As New Rect(AdornedElement.DesiredSize)
        Dim renderBrush As New SolidColorBrush(Colors.Green)
        renderBrush.Opacity = 0.2
        Dim renderPen As New Pen(New SolidColorBrush(Colors.Navy), 1.5)
        Dim renderRadius As Double
        renderRadius = 5.0

        'Draw a circle at each corner.
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius)
    End Sub
End Class

Tek bir UIElement'i süsleme

Belirli bir UIElement öğesine bir donatıcı bağlamak için şu adımları izleyin:

  1. Adlandırılacak UIElement öğesi için bir AdornerLayer nesnesi almak üzere GetAdornerLayer statik yöntemi çağırın. GetAdornerLayer, belirtilen UIElement konumundan başlayarak görsel ağaç boyunca yukarı doğru çıkar ve bulduğu ilk donatıcı katmanını döndürür. (Hiçbir süsleyici katmanı bulunmazsa yöntem null döndürür.)

  2. Adorner'ı hedefe bağlamak için Add metodunu çağırın.

Aşağıdaki örnek, simpleCircleAdorner'ı (yukarıda gösterilen) adlandırılmış TextBox bağlar:

myAdornerLayer = AdornerLayer.GetAdornerLayer(myTextBox);
myAdornerLayer.Add(new SimpleCircleAdorner(myTextBox));
myAdornerLayer = AdornerLayer.GetAdornerLayer(myTextBox)
myAdornerLayer.Add(New SimpleCircleAdorner(myTextBox))

Uyarı

Bir donatıcıyı başka bir öğeye bağlamak için Genişletilebilir Uygulama İşaretlemesi Dili 'nin (XAML) kullanılması şu anda desteklenmiyor.

Panelin çocuk öğelerini süsleme

Bir donatıcıyı Panel alt öğelerine bağlamak için şu adımları izleyin:

  1. static yöntemini, alt öğeleri donatılacak öğe için bir süsleyici katmanı bulmak amacıyla GetAdornerLayer çağırın.

  2. Üst öğenin alt öğelerini numaralandırın ve her alt öğeye bir donatıcı bağlamak için Add yöntemini çağırın.

Aşağıdaki örnek, bir SimpleCircleAdorner'ı (yukarıda gösterilmiştir) StackPanel adlı öğenin alt elemanlarına bağlar:

foreach (UIElement toAdorn in myStackPanel.Children)
  myAdornerLayer.Add(new SimpleCircleAdorner(toAdorn));
For Each toAdorn As UIElement In myStackPanel.Children
    myAdornerLayer.Add(New SimpleCircleAdorner(toAdorn))
Next

Ayrıca bakınız