Рейтинг@Mail.ru

Передача события прокрутки мыши родительскому элементу в 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 в изображение. Допустим, сохранить как картинку динамически сгенерированный график или таблицу. Можно сделать это, например, так.

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

WPF: Использование системных цветов

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

Для использования системных цветов в XAML необходимо объявить цвет в секции ресурсов:

<Window.Resources>
    <SolidColorBrush x:Key="sysColor" Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" />
</Window.Resources>

А затем его можно использовать в разметке так:

<Menu Background="{StaticResource sysColor}"></Menu>
Читать далее...

WPF: Изменение источника элементов при изменении свойства

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

Чтобы динамически изменять коллекцию – источник привязки, можно воспользоваться триггерами данных DataTrigger:

<Style TargetType="ComboBox" x:Key="comboSourceStyle">
  <Style.Triggers>
    <DataTrigger Binding="{Binding Speed}" Value="0">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection1}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding Speed}" Value="1">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection2}" />
    </DataTrigger>
  </Style.Triggers>
</Style>
Читать далее...

WPF: Перемещение фокуса ввода на произвольный элемент GUI

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

Dim tr As New TraversalRequest(FocusNavigationDirection.Last)
MoveFocus(tr)

Это может помочь в случае, когда, например, нужно обновить поля ввода TextBox при срабатывании кнопки по умолчанию по нажатию Enter на клавиатуре.

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

Что делать если изображение видно в редакторе XAML, но при выполнении приложения - нет

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

У вас ситуация: в редакторе XAML в Visual Studio вы задали визуальный элемент Image, который использует картинку из папки проекта. Вы видите её в редакторе, всё нормально. Но стоит запустить скомпилированное приложение – и изображения в нём не видно. Что делать?

Иногда помогает очистка решения и перекомпиляция: Построение Очистить, Построение Перестроить проект.

Если не помогло, кликаем правой кнопкой мыши на изображении в обозревателе решений, выбираем Свойства, в открывшейся панели свойств идём в Действия при сборке (BuildActions) "Нет" меняем на Ресурс (Resource).

Панель свойств изображения в Visual Studio 2013
Читать далее...

XAML: Почему текст в ListView не переносится на новую строку

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

По умолчанию, если ширина элемента списка ListView больше, чем ширина списка, его содержимое не переносится на новую строку. Чтобы перенос происходил, нужно использовать шаблон DataTemplate, применённый к элементу списка:

<ListView ItemsSource="{Binding myCollection}" ItemTemplate="{StaticResource lvDataTemplate}" />

Шаблон будет таким:

<DataTemplate x:Key="lvDataTemplate">
    <TextBlock Text="{Binding}" TextWrapping="Wrap" />
</DataTemplate>
Читать далее...
Subscribe to this RSS feed