Как позволить пользователю добавлять, что аннотации к UI управляют в WPF?

Получите разницу в секундах, а затем просто конвертируйте секунды в часы.

var startDate = new Date();
var endDate = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;
// 3.557 seconds difference between the two times
var hourDiff = seconds / 60 / 60;
// 0.0009880555555555556 hours..

Завернуто в функцию:

function getHourDiff(date1, date2) {
    var seconds = (date1.getTime() - date2.getTime()) / 1000;
    return seconds / 60 / 60;
}
5
задан Vin 3 February 2009 в 14:55
поделиться

1 ответ

Хм. Я, вероятно, сделал бы это с adorner:

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

И затем Вы использовали бы его:

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

Я оставлю Вас, чтобы отрегулировать положение и фактическое появление аннотации, но Вы получаете идею. Это будет работать на любой UIElement, включая пользовательские элементы управления.

Это было неподготовленным ответом на основе некоторой другой работы, которую я сделал с Adorners. Выше кода может или может не скомпилировать. Я не позволял редактировать аннотации, но можно сделать так легко путем удаления "Меня. IsHitTestVisible = Ложная" строка и События mouseUp обработки в adorner.

5
ответ дан 14 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: