0

我的应用程序中有一个 TreeView

        <TreeView

            ...

            <TreeView.ItemContainerStyle>
                <Style 
                    TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
                    <Setter Property="Margin" Value="0, 2"/>
                    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnMouseLeftButtonClicked"/>
                </Style>
            </TreeView.ItemContainerStyle>

            <TreeView.ItemTemplate>

                <HierarchicalDataTemplate 
                    ItemsSource="{Binding Children}">

                    <StackPanel 
                        Orientation="Horizontal">
                        <Image 
                            VerticalAlignment="Center"
                            Width="20"
                            Height="20"
                            Source="{Binding Type, Converter={StaticResource ItemTypeToImageConverter}}"/>
                        <TextBlock 
                            FontSize="16"
                            Foreground="White"
                            FontFamily="{StaticResource Dosis}"
                            Margin="10, 0"
                            VerticalAlignment="Center" 
                            Text="{Binding Name}"/>
                    </StackPanel>

                </HierarchicalDataTemplate>

            </TreeView.ItemTemplate>

        </TreeView>

OnMouseLeftButtonClicked 处理程序:

protected void OnMouseLeftButtonClicked(object sender, MouseButtonEventArgs args)
{

    ...

}

我只想在用户单击树项内容时执行处理程序中定义的一些操作,而不是在单击扩展器时执行。如何区分点击来源?

4

2 回答 2

0

至于我,我对 XAML 使用了稍微不同的结构,我将其粘贴,以便您可以根据自己的情况调整它:

<TreeView BorderThickness="0" ItemsSource="{Binding RepereTree}" Width="200" Background="Transparent">
    <TreeView.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey }" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    </TreeView.Resources>
    <TreeView.ItemTemplate>
        <DataTemplate>
            <TreeViewItem  ItemsSource="{Binding ListeSubReperes}">
                <TreeViewItem.Header>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Background="Transparent" Foreground="#FF042271" Text="{Binding NameOri}" HorizontalAlignment="Left" VerticalAlignment="Center" MouseMove="mouseOverNameRepere" ToolTip="{Binding Path=ToolTipModifications}" MouseDown="TreeView_Main"/>
                    </Grid>
                </TreeViewItem.Header>
                <TreeViewItem.ItemTemplate>
                    <DataTemplate>
                        <Grid Margin="-20,0,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock Background="{StaticResource WindowBackgroundColor}" Foreground="#FF042271" Text="{Binding Name}" Margin="10,0,0,0" HorizontalAlignment="Left" Tag="{Binding IdRepereOri}" VerticalAlignment="Center" Grid.Column="0" MouseDown="TreeView_Sub"/>
                            <!--<TextBlock Foreground="#FF042271" Text="{Binding IdRepereOri}" Margin="10,0,10,0" HorizontalAlignment="Left" VerticalAlignment="Center"  Grid.Column="1"/>-->
                        </Grid>
                    </DataTemplate>
                </TreeViewItem.ItemTemplate>
            </TreeViewItem>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

如您所见,我设置了两个不同的功能MouseDown="TreeView_Main",以及MouseDown="TreeView_Sub"用户是单击项目还是子项目。在你的情况下就足以删除"TreeView_Sub"

于 2019-11-10T12:31:12.087 回答
0

我找到了一个简单的解决方案。我已将 HierarchicalDataTemplate 内容包装在边框中,如下面的代码所示:

                <HierarchicalDataTemplate
                    ItemsSource="{Binding Children}">

                    <Border
                        Background="Transparent"
                        BorderThickness="0"
                        MouseDown="OnMouseLeftButtonClicked">
                        <StackPanel 
                            Orientation="Horizontal">
                        <Image 
                            VerticalAlignment="Center"
                            Width="20"
                            Height="20"
                            Source="{Binding Type, Converter={StaticResource ItemTypeToImageConverter}}"/>
                        <TextBlock 
                            FontSize="16"
                            Foreground="White"
                            FontFamily="{StaticResource Dosis}"
                            Margin="10, 0"
                            VerticalAlignment="Center" 
                            Text="{Binding Name}"/>
                        </StackPanel>
                    </Border>

                </HierarchicalDataTemplate>

然后,您所需要的就是将发件人投射到 Border,然后使用它的属性来处理事件。

于 2019-11-10T14:08:51.423 回答