我有一个TreeView,它包含不同水平的TreeViewItem的混合物。
以下是完美的工作方式:
<TreeViewItem Tag="Link" MouseDoubleClick="TreeViewItem_MouseDoubleClick">
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="Link" Margin="0 0 5 0"/>
<TextBlock Text="Link"/>
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>但是,当涉及到具有TreeViewItem.Header的MouseDoubleClick事件时,我无法正确地设置MouseDoubleClick事件,请参见下面的内容:
<TreeViewItem IsExpanded="True" MouseDoubleClick="TreeViewItem_MouseDoubleClick">
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="HelpCircleOutline" Margin="0 0 5 0"/>
<TextBlock Text="Help" FontWeight="Bold"/>
</StackPanel>
</TreeViewItem.Header>
<ContentControl>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="BookOpenOutline" Margin="0 0 5 0"/>
<TextBlock Text="Technical Guide"/>
</StackPanel>
</ContentControl>
</TreeViewItem>上面的问题是它在帮助头和技术指南子节点上都会触发。
我不能将事件添加到<StackPanel>中,因为它不支持它,所以我用<ContentControl>包装了它,并尝试将事件添加到其中,但它似乎根本不触发。
是否有任何方法可以让“技术指南”触发事件,但也可以按照第一个代码片段添加Tag=""属性,因为我正在TreeViewItem_MouseDoubleClick事件中检查该值?
编辑
根据请求,为MouseDoubleClick事件提供代码:
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (sender is TreeViewItem item)
{
var header = item.Tag as string;
switch (header)
{
case "Link":
//Open new window code
break;
}
}发布于 2021-11-10 13:49:41
我不能将事件添加到
<StackPanel>中,因为它不支持它.
是的,如果您将Background属性设置为Transparent并处理MouseLeftButtonDown事件并检查MouseButtonEventArgs的ClickCount属性
private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
//double-click detected
}
}XAML:
<StackPanel Orientation="Horizontal"
Background="Transparent"
MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
<TextBlock Text="Technical Guide"/>
</StackPanel>发布于 2021-11-09 16:43:14
而不是从treeview陷阱点击,为什么你不陷阱点击从文本块?
<TreeViewItem IsExpanded="True" >
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="HelpCircleOutline" Margin="0 0 5 0"/>
<TextBlock Text="Help" FontWeight="Bold" MouseDown="TextBlock_MouseDown"/>
</StackPanel>
</TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="BookOpenOutline" Margin="0 0 5 0"/>
<TextBlock Text="Technical Guide" MouseDown="TextBlock_MouseDown"/>
</StackPanel>
</TreeViewItem> private void TextBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
// simulate doubleclick
if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2)
{
System.Diagnostics.Debug.WriteLine((TextBlock)sender.Text);
}
}https://stackoverflow.com/questions/69899684
复制相似问题