Рейтинг@Mail.ru

Как передать событие родительскому элементу страницы XAML

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

Данный пример передаёт событие прокрутки среднего колеса мыши родительскому элементу:

В XAML присвоим имя событию:

<Element PreviewMouseWheel="scrollingTest">

Код (VB.NET):

''' <summary>
''' Обеспечивает прокрутку родительского ScrollViewer с помощью среднего колеса мыши.
''' </summary>
Private Sub scrollingTest(sender As Object, e As MouseWheelEventArgs)
  e.Handled = True 'перехват события
  Dim e2 As MouseWheelEventArgs = New MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) 'получаем свойства события
  e2.RoutedEvent = UIElement.MouseWheelEvent 
  MainWindow.MyScrollViewer.RaiseEvent(e2) 'передаём перехваченное событие родительскому скролл-вьюеру
End Sub
Читать далее...

Реализация ObservableCollection в WPF

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

1. Класс должен реализовывать интерфейс INotifyPropertyChanged:

Public Class MainWindow
    Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

Public Sub NotifyPropertyChanged(ByVal propName As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub

2. Перечислимое свойство должно быть типа System.Collections.ObjectModel.ObservableCollection:

	
Public Property MyCollection As ObservableCollection(Of SingleStep) 
Читать далее...

Перенос текста TextWrapping в XAML

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

Зачастую нужно чтобы текст переносился на следующую строку, занимая всю ширину родительского элемента. За это отвечает свойство TextWrapping.Распространённые случаи:

<ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">

Элементы ListViewItem при этом должны быть типа TextBlock, а горизонтальная полоса прокрутки HorizontalScrollBar отключена.

Или другой случай:

<GroupBox.Header>
  <TextBlock TextWrapping="Wrap" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}, Path=ActualWidth}" />
</GroupBox.Header>

Вместо GroupBox.Header может быть любой контейнер. Важно, что ширина устанавливается с помощью привязки к актуальной ширине ActualWidth родителя.

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

Поиск определённого окна в приложении .NET

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

Чтобы получить объект Window определённого типа, можно перебрать все активные окна приложения:

For Each wnd As Window In Application.Current.Windows
    If wnd.GetType.Equals(GetType(MyParentWindow)) Then
        parentWindow = CType(wnd, MyParentWindow)
        Exit For
    End If
Next
Читать далее...

Как использовать UserControl в качестве шаблона для ListViewItem

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

Чтобы использовать собственный пользовательский элемент управления UserControl в качестве шаблона элемента ListViewItem или ListBoxItem, нужно следующее:

<ListBox ItemsSource="{Binding MyCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <local:MyUserControl />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Здесь local – это пространство имён вашей сборки. Например: <xmlns:local="clr-namespace:MyApplication" />>.

При этом в MyUserControl не следует задавать контекст данных DataContext.

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