WPF Treeview - странная проблема с пользовательским интерфейсом при клике ребенка - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть древовидная структура с флажками для каждого элемента, использующего 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 одного из элементов листа - если я нажимаю флажок, все в порядке.Когда я нажимаю на элемент, все дерево перемещается влево, скрывая кнопку + развернуть, и у меня нет способа вернуть его обратно.Это как бы выравнивает флажок слева от контейнера, таким образом скрывая все, что находится выше и слева от него.

Я понимаю, что это странная проблема с пользовательским интерфейсом, и я сомневаюсь, что кто-то видел это раньше.Итак, позвольте мне спросить: есть ли способ как-то отменить этот клик?Могу ли я сказать WPF ничего не делать, если я нажму эту часть элемента?Я попытался установить для параметра Handled значение true в обработчике MouseLeftButtonUp текстового блока, но это не помогло мне.

Любые другие предложения приветствуются - я понятия не имею, как к этому подойти.

1 Ответ

0 голосов
/ 06 декабря 2010

попробуйте поместить все TreeView в ScrollViewer, мне кажется, содержание слишком большое, чтобы соответствовать доступной области:

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <TreeView ..../>
</ScrollViewer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...