2009-02-03 26 views
5

Ek açıklamaları destekleyen WPF belge görüntüleme denetimleri, FlowDocumentReader ve FlowDocumentScrollViewer'ın yanı sıra DocumentViewerBase ve FlowDocumentPageViewer gibi DocumentViewerBase'den türetilen denetimleri içerir.Kullanıcının WPF'deki UI denetimlerine ek açıklamalar eklemesine nasıl izin verilir?

The in-built Annotations support for Document based controls is awesome in WPF

Ben, Düğme, TextBox, ListBox öğeler vb Fikir kullanıcı arayüzü ekranda bazı yorum geçmek izin vermektir gibi WPF ortak denetimleri işlevsellik eklemek mümkün olacağını merak ediyorum başka bir kullanıcıya.

Akla ilk gelen şey, DocumentViewerBase öğesinden devralmak ve kendi özel denetimlerinizi oluşturmaktır. Nasıl çalışacağından emin değilim. Özel olmayan kontrollerin açıklanması gerekiyorsa ne yapmalı?

Bu tür bir özellik çalıştı veya gördü mü?

Her türlü yönlendirme yararlı olacaktır.

cevap

5

Hmmm.

Imports System.Windows 
Imports System.Windows.Documents 
Imports System.Windows.Media 

Public Class Annotation 
    Inherits Adorner 

    Private _fill As Brush 
    Private _pen As Pen 
    Private _text As FormattedText 
    Private _annotationText as String 

    Public Sub New(ByVal adornedElement As UIElement, ByVal annotationText as String) 
     MyBase.New(adornedElement) 
     _annotationText = annotationText 
     _fill = New SolidColorBrush(Color.FromArgb(&H33, &HB0, &HC4, &HDE)) 
     _fill.Freeze() 
     _pen = New Pen(Brushes.LightSteelBlue, 3.0) 
     _pen.Freeze() 
     _text = New FormattedText(_annotationText, Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, New Typeface("Verdana"), 11.0, Brushes.Black) 
     Me.IsHitTestVisible = False 
    End Sub 

    Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext) 
     MyBase.OnRender(drawingContext) 
     Dim adornedRect As New Rect(MyBase.AdornedElement.RenderSize) 
     drawingContext.DrawRectangle(_fill, _pen, adornedRect) 
     drawingContext.DrawText(_text, New Point(0,0)) 
    End Sub 

End Class 

Ve sonra bunu kullanmak istiyorsunuz: Muhtemelen bir adorner bu yapardın ben konumunu ve açıklama fiili görünümünü ayarlamak için bırakacaktır

Private Sub AddAnnotation(ByVal uie As UIElement, ByVal annotationText as String) 
    Dim annotation = New Annotation(uie) 
    Dim adornerLayer = AdornerLayer.GetAdornerLayer(uie, annotationText) 
    adornerLayer.Add(annotation) 
End Sub 

ama olsun fikir. Bu, özel denetimler dahil olmak üzere herhangi bir UIElement için için çalışacaktır.

Bu, Adorners'la yaptığım diğer çalışmalara dayanan bir manşet yanıtıydı. Yukarıdaki kod, derlenebilir veya olmayabilir. Açıklamaları düzenlemenin bir yolunu bulamadım, ancak "Me.IsHitTestVisible = False" satırını kaldırarak ve adında bulunan MouseUp olaylarını işleyerek kolayca yapabilirsiniz.

+0

Yani kutunun dışında hiçbir şey DocumentViewer gibi ek açıklamalar denetimler için kullanılabilir hale getirilebilir, sence? Bu açıklama ve kod pasajı için teşekkürler, Bunu çalıştırmayı deneyebilir ve alabiliyor mu bakalım. – Vin

+0

Varolan Ek Açıklamaları kullanmamayı düşünemiyorum, çünkü UIElement ile çalışan bir şeye ihtiyacınız var, çünkü bu (ve alt sınıflar) neredeyse tamamen UI geliştirmede uğraştığınız şey. Bazı üçüncü parti projeleri olabilir, ancak bunun farkında değilim. –

İlgili konular