Рейтинг@Mail.ru

Как в XAML сделать привязку к значению системной переменной

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

Допустим, мы хотим прямо в XAML сделать привязку непосредственно к системной переменной. Скажем, вывести в элементе TextBlock максимальное значение для типа System.UInt64 (беззнаковое 64-разрядное целое). Для этого необходимо:

  1. В начале страницы/окна добавить ссылку на пространство имён System:
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
  2. В XAML коде страницы ссылка на тип будет иметь следующий вид:
    <TextBlock Text="{x:Static Member=sys:UInt64.MaxValue}" />
    или проще:
    <TextBlock Text="{x:Static sys:UInt64.MaxValue}" />
Читать далее...

Добавление заданного текста к содержимому 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
Читать далее...
Subscribe to this RSS feed
  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev