I’m starting to get my head wrapped around the WPF / XAML paradigm, and hadn’t come across too many examples of Copy/Paste functionality so I thought I would share my recent discovery of the ApplicationCommands class. With it, adding a CommandBinding to receive Copy events for a control like TreeView is trivial.
Private Sub MainWindow_Loaded(sender As System.Object,
e As System.Windows.RoutedEventArgs) Handles MainWindow.Loaded
' Handle Copy/Paste function
Dim cb As New CommandBinding(ApplicationCommands.Copy,
AddressOf TableList_Copy)
TableList.CommandBindings.Add(cb)
End Sub
Private Sub TableList_Copy(ByVal sender As Object,
ByVal e As ExecutedRoutedEventArgs)
Dim selectNode As Object = TableList.SelectedValue
If TypeOf selectNode Is DbTable Then
Clipboard.SetText(CType(selectNode, DbTable).TableName)
Else
Clipboard.SetText(CType(selectNode, Column).Name)
End If
End Sub
My TreeView is bound to a HierarchicalDataTemplate that can contain a collection of Column objects, hence the need to check the type of the TableList.SelectedValue
<TreeView Margin="19,57,0,28" Name="TableList"
HorizontalAlignment="Left" Width="286"
ItemsSource="{Binding Path=.}"
ItemTemplate="{StaticResource TableListTemplate}" />
<Grid.Resources>
<DataTemplate x:Key="TableTemplate">
<TextBlock>
<TextBlock Text="{Binding Path=Name}" />
<Run>(</Run>
<TextBlock Text="{Binding Path=Type}" />
<Run>)</Run>
</TextBlock>
</DataTemplate>
<HierarchicalDataTemplate x:Key="TableListTemplate"
ItemsSource="{Binding Path=ColumnList}"
ItemTemplate="{StaticResource TableTemplate}" >
<TextBlock Text="{Binding Path=TableName}" />
</HierarchicalDataTemplate>
</Grid.Resources>
No comments:
Post a Comment