首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# WPF TreeViewItem MouseDoubleClick事件在TreeViewItem上的TreeViewItem.Header

C# WPF TreeViewItem MouseDoubleClick事件在TreeViewItem上的TreeViewItem.Header
EN

Stack Overflow用户
提问于 2021-11-09 14:13:35
回答 2查看 80关注 0票数 0

我有一个TreeView,它包含不同水平的TreeViewItem的混合物。

以下是完美的工作方式:

代码语言:javascript
复制
            <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.HeaderMouseDoubleClick事件时,我无法正确地设置MouseDoubleClick事件,请参见下面的内容:

代码语言:javascript
复制
            <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事件提供代码:

代码语言:javascript
复制
    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;
             }
     }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-10 13:49:41

我不能将事件添加到<StackPanel>中,因为它不支持它.

是的,如果您将Background属性设置为Transparent并处理MouseLeftButtonDown事件并检查MouseButtonEventArgsClickCount属性

代码语言:javascript
复制
private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount == 2)
    {
        //double-click detected
    }
}

XAML:

代码语言:javascript
复制
<StackPanel Orientation="Horizontal" 
            Background="Transparent"
            MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
    <TextBlock Text="Technical Guide"/>
</StackPanel>
票数 1
EN

Stack Overflow用户

发布于 2021-11-09 16:43:14

而不是从treeview陷阱点击,为什么你不陷阱点击从文本块?

代码语言:javascript
复制
        <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>

代码语言:javascript
复制
    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);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69899684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档