Рейтинг@Mail.ru

Добавление заданного текста к содержимому RichTextBox (WPF)

Published in Полезные советы

Напишем метод, который добавляет к содержимому расширенного текстового поля RichTextBox текст заданного цвета:

Private Sub AppendText(text As String, color As Color)
    With RichTextBox1
            .SelectionStart = RichTextBox1.TextLength
            .SelectionLength = 0
            .SelectionColor = color
            .AppendText(text)
            .SelectionColor = .ForeColor
    End With
End Sub
Читать далее...

Определение константы в XAML

Published in Полезные советы

Можно определить константу заданного типа прямо в XAML, а не в коде. Для этого следует в разделе импорта пространств имён сослаться, среди прочих, на пространство имён System:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Далее в разделе ресурсов следует объявить константу необходимого типа. Например, для определения строковой константы:

<sys:String x:Key="myConst">Это константа, определённая в  XAML</sys:String>

Аналогичным образом можно объявить даже массив:

<x:Array Type="{x:Type sys:Int32}" x:Key="myIntegerArray">
    <sys:Int32>1</sys:Int32>
    <sys:Int32>2</sys:Int32>
    <sys:Int32>3</sys:Int32>
    <sys:Int32>4</sys:Int32>
</x:Array>

Теперь, в XAML коде страницы или окна, можно использовать определённую константу так:

<TextBlock Text="{StaticResource myConst}" />

Или так:

<ComboBox ItemsSource="{StaticResource myIntegerArray}" />
Читать далее...

Стили обрезки тек текста в TextBlock (WPF)

Published in Полезные советы

У элемента управления TextBlock имеется интересное свойство TextTrimming, которое позволяет определить стиль, как будет отображаться текст, который полностью не помещается в родительском контейнере. Например, если указать так:

<TextBlock TextTrimming="WordEllipsis" />

то, после последнего помещающегося слова в текстовом поле будет стоять многоточие, которое показывает, что текст показывается не полностью. А если задать свойству такое значение:

<TextBlock TextTrimming="CharacterEllipsis" />

то многоточие будет стоять после последнего символа, помещающегося в родительском контейнере. При этом слово может быть оборвано в середине.

Читать далее...

Отмена привязки сочетания клавиш для команд в WPF

Published in Полезные советы

Иногда мы хотим отменить стандартное сочетание клавиш для какой-либо команды в XAML. Например, де-факто справка во всех WPF (и не только) приложениях вызывается по нажатию кнопки F1. Но мы хотим, чтобы окно справки открывалось по нажатию на F2, а на F1 – нет. Если мы напишем так:

<KeyBinding Key="F2" Command="Help" />

то справка будет открываться и по нажатию F2, и по нажатию F1. Необходимо явно отключить срабатывание по нажатию кнопки F1. Для этого следует написать так:

<KeyBinding Key="F2" Command="Help" />
<KeyBinding Key="F1" Command="NotACommand" />
Читать далее...

Проверка значений, вводимых в поле TextBox, в XAML

Published in Полезные советы

В WPF имеется специальный стандартный механизм, позволяющий выполнять проверку (валидацию) данных, вводимых пользователем в текстовое поле TextBox. Этот механизм называется правилами проверки (validation rule). Для полей ввода, в которые введены недопустимые значения, в WPF даже определён свой стиль: красная рамка вокруг элемента TextBox. Конечно, его можно переопределить.

Чтобы воспользоваться стандартным валидатором, нужно выполнить три простых шага. Давайте рассмотрим их на таком примере: есть свойство MyProperty типа Integer, и его значение должно лежать в границах от 1 до 10.

1) Сначала создаём класс, который является наследником класса ValidationRule:

Читать далее...

Передача события прокрутки мыши родительскому элементу в WPF на примере элемента TreeView

Published in Полезные советы

Для передачи события прокрутки колеса мыши родительскому элементу, сначала определим в XAML событие PreviewMouseWheel.

<TreeView PreviewMouseWheel="ScrollingToParent" />

Теперь напишем обрабатывающий это событие метод таким способом:

''' <summary>
''' Обеспечивает передачу события прокрутки колеса мыши родительскому элементу.
''' </summary>
Private Sub ScrollingToParent(sender As Object, e As MouseWheelEventArgs)
    e.Handled = True
    Dim e2 As New MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) With {
        .RoutedEvent = UIElement.MouseWheelEvent,
        .Source = sender
    }
    Dim parent As UIElement = CType(CType(sender, Control).Parent, UIElement)
    parent.RaiseEvent(e2)
End Sub
Читать далее...

WPF: Как получить список всех элементов UIElement заданного типа

Published in Полезные советы

Напишем метод, который будет возвращать список всех элементов некоторого контейнера:

''' <summary>
''' Возвращает все элементы UIElement заданного типа.
''' </summary>
Public Shared Iterator Function FindVisualChildren(Of T As DependencyObject)(ByVal depObj As DependencyObject) As IEnumerable(Of T)
    If (depObj IsNot Nothing) Then
        For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1
            Dim child As DependencyObject = VisualTreeHelper.GetChild(depObj, i)
            If (child IsNot Nothing) AndAlso (TypeOf child Is T) Then
                Yield CType((CObj(child)), T)
            End If
            For Each current As T In MainWindow.FindVisualChildren(Of T)(child)
                Yield current
            Next
        Next
    End If
    Return
End Function

Теперь можно использовать данный метод таким способом (здесь MainWindow – это тот контейнер, список чьих потомков нужно получить):

Dim sameTypeElements as New List(Of ComboBox)
For Each cb As ComboBox In FindVisualChildren(Of ComboBox)(MainWindow)
    sameTypeElements.Add(cb)
Next
Читать далее...

WPF: Как сохранить элемент управления FrameworkElement() в виде изображения

Published in Программирование

Нужно сохранить какой-то элемент управления окна WPF в изображение. Допустим, сохранить как картинку динамически сгенерированный график или таблицу. Можно сделать это, например, так.

Читать далее...
Subscribe to this RSS feed