Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使Left双击在整个treeviewitem区域工作,而不仅仅是在文本上?_Wpf_Xaml_Material Design In Xaml - Fatal编程技术网

Wpf 如何使Left双击在整个treeviewitem区域工作,而不仅仅是在文本上?

Wpf 如何使Left双击在整个treeviewitem区域工作,而不仅仅是在文本上?,wpf,xaml,material-design-in-xaml,Wpf,Xaml,Material Design In Xaml,我有一个树状视图,我使用一个ItemTemplate进行项目绑定,如下所示: <TreeView ItemsSource="{Binding TreeViewItemCollection}"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Children}"> <StackPanel Orientation=

我有一个树状视图,我使用一个ItemTemplate进行项目绑定,如下所示:

<TreeView ItemsSource="{Binding TreeViewItemCollection}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <StackPanel.InputBindings>
                    <MouseBinding Gesture="LeftDoubleClick" Command="{Binding Command}" CommandParameter="{Binding CommandParameter}"></MouseBinding>
                </StackPanel.InputBindings>
                <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></TextBlock>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
在Ui中,它看起来像这样:

现在,如果我双击文本,命令就会触发。当我双击灰色区域时,什么也没发生。我如何实现这种行为

定义一个ItemContainerStyle,用于拉伸内容并删除默认填充,然后将StackPanel放在一个元素中,将填充添加回:

<TreeView ItemsSource="{Binding TreeViewItemCollection}">
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem" BasedOn="{StaticResource MaterialDesignTreeViewItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="VerticalContentAlignment" Value="Stretch" />
            <Setter Property="Padding" Value="0" />
        </Style>
    </TreeView.ItemContainerStyle>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <Border Background="Transparent" Padding="8">
                <Border.InputBindings>
                    <MouseBinding Gesture="LeftDoubleClick" Command="{Binding Command}" CommandParameter="{Binding CommandParameter}" />
                </Border.InputBindings>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></TextBlock>
                </StackPanel>
            </Border>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

在TreeViewItem的ControlTemplate中应用InputBinding:在哪里可以获得默认的控件模板?是否有类似于style.basedon属性的内容?您当前使用的样式/模板是什么?它看起来不像默认的。MaterialDesignInxalThemes。请在下次提问时说明这一点。看看我的答案,你的问题的解决方案。不幸的是仍然不起作用,但它看起来更好。到底是什么不起作用?你设置边界的背景了吗?实际上,您可以复制并粘贴我的示例。它对我有效,也就是说,当我在文本外单击时,命令被触发。好吧,这很奇怪,因为我几乎复制了你的代码。不幸的是,我的工作时间结束了。我明天再看一看。不,不幸的是它坏了。我也在一个单独的项目中进行了测试。我希望图片中的灰色区域是可单击的。我找到了一个解决方案,将treeviewitem的宽度属性设置为binding Actual width of Senior treeviewitem,并将border的宽度设置为binding width of Senior treeviewitem。问题是它的性能非常糟糕,所以我不能使用它