WPF Treeview - 儿童点击时出现奇怪的UI问题

时间:2010-12-06 17:50:24

标签: wpf treeview

我有一个使用DataTemplate和2 HierarchicalDataTemplates的每个项目的复选框的树视图(我的绑定列表由2或3个级别组成,复选框仅出现在叶级别 - 最后一个)。

叶子看起来像这样:

<TreeView ItemsSource="{Binding}">
<DataTemplate DataType="{x:Type local:MatchDataLeaf}">
    <Grid Margin="3">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="240"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="150"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="60"/>
        </Grid.ColumnDefinitions>

        <StackPanel Grid.Column="0" Orientation="Horizontal">
            <CheckBox x:Name="selectCheckBtn" Grid.Column="0" IsChecked="True" Click="select_Click"
                      Tag="{Binding}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}"/>
            <TextBlock Grid.Column="1" Margin="5,0,0,0" Text="{Binding Path=Name}" FontFamily="Arial" FontSize="12" FontWeight="Bold" Foreground="Black" VerticalAlignment="Center"/>
        </StackPanel>
    </Grid>
</DataTemplate>

当我点击其中一个叶子项目的TextBlock部分时出现问题 - 如果我单击复选框,一切正常。当我单击该项目时,整个树向左移动,隐藏+扩展按钮,我没有办法将其取回。它将复选框对齐到容器的左侧,从而隐藏了它的上方和左侧的所有内容。

我意识到这是一个奇怪的UI问题,我怀疑之前有人见过这个问题。所以让我问一下:有没有办法以某种方式取消点击?如果点击该项目的那一部分,我可以告诉WPF不要做什么吗?我尝试在Textblock的MouseLeftButtonUp处理程序上将Handled设置为true,但这对我没有任何帮助。

欢迎任何其他建议 - 我不知道如何处理这件事。

1 个答案:

答案 0 :(得分:0)

尝试将整个TreeView放入ScrollViewer对我来说听起来内容很大,以适应可用区域:

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <TreeView ..../>
</ScrollViewer>