Reputation: 5003
I am new in WPF. I have created a static menu using Tree view in WPF. But left menu click event not triggered. I have the following code.
<UserControl x:Class="navigationApp.dashboard"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:navigationApp"
mc:Ignorable="d"
d:DesignHeight="650" d:DesignWidth="1120">
<Grid >
<TreeView>
<TreeViewItem Header="Dashboard" Name="menuDashboard" MouseLeftButtonDown="menuDashboard_MouseLeftButtonDown"/>
<TreeViewItem Header="Customer">
<TreeViewItem Header="Customer Listing" Name="menuCustomerList" MouseLeftButtonDown="menuCustomerList_MouseLeftButtonDown"/>
<TreeViewItem Header="Add New Customer" Name="menuCustomerReg" MouseLeftButtonDown="menuCustomerReg_MouseLeftButtonDown"/>
</TreeViewItem>
<TreeViewItem Header="Settings"/>
</TreeView>
</Grid>
</UserControl>
Is any additional code needed?
Upvotes: 0
Views: 332
Reputation: 101
If TreeViewItem is focusable then the event will be consumed. You can register a global event handler to forward the event again.
static MyClass()
{
EventManager.RegisterClassHandler(typeof(TreeViewItem),
Mouse.PreviewMouseDownEvent,
new MouseButtonEventHandler(OnMouseButtonDown), true);
}
So...Just capture the event and re-send. Here I am forwarding to its parent TreeView.
private static void OnMouseButtonDown(object sender, MouseButtonEventArgs e)
{
var tvi = sender as TreeViewItem;
var parentTree = tvi.GetParent<TreeView>();
var eventArgs = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton)
{
RoutedEvent = UIElement.MouseDownEvent,
Source = sender
};
parentTree.RaiseEvent(eventArgs);
e.Handled = false;
}
Upvotes: 0
Reputation: 169420
You could probably use a single SelectedItemChanged
event handler:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeViewItem clickedTreeViewItem = e.NewValue as TreeViewItem;
//...
}
XAML:
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeViewItem Header="Dashboard" Name="menuDashboard" />
<TreeViewItem Header="Customer">
<TreeViewItem Header="Customer Listing" Name="menuCustomerList" />
<TreeViewItem Header="Add New Customer" Name="menuCustomerReg" />
</TreeViewItem>
<TreeViewItem Header="Settings"/>
</TreeView>
Upvotes: 1