Как изменить переключатель TreeView - PullRequest
0 голосов
/ 28 января 2020

У меня работает древовидная структура, есть кнопка, которая может раскрыть ее содержимое. Когда я это делаю, каждый столбец слишком далеко вправо от того места, где я хочу, из-за ширины раскрытия переключателя. Я бы хотел изменить это поведение, но я не знаю как, я понимаю, что это связано с определением шаблона элемента управления TreeView?

Это мой код

c#

Class MyList
{
    double someDouble;
    double somestring;
    souble anotherString;
    bool thisOnesABool;
}

Class MyContainer
{
    string headerText1;
    string headerText2;

    List<MyList> SomeList;
}

List<MyContainer> SomeContainerInCodeBehind = new List<MyContainer>();

WPF

<UserControl.Resources>
    <DataTemplate x:Key="level2">
        <Grid>
            //the content of 'MyList'
        </Grid>
    </DataTemplate>

    <HierarchicalDataTemplate x:Key="level1"
                              ItemsSource="{Binding SomeListWithinContainer}"
                              ItemTemplate="{StaticResource level2}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="100"/>
            </Grid.ColumnDefinitions>
            <TextBox Grid.Column="0" Text="{Binding HeaderText}" />
            <TextBox Grid.Column="1" Text="{Binding MoreHeaderText}" />
        </Grid>
    </HierarchicalDataTemplate>
</UserControl.Resources>

<Grid>
    <TreeView Name="TheTreeView"
              Grid.Row="1"
              ItemTemplate="{StaticResource level1}"
              ItemsSource="{Binding SomeContainerInCodeBehind}">
    </TreeView>
</Grid>

1 Ответ

2 голосов
/ 01 февраля 2020

Чтобы изменить положение расширителя (или расширенных дочерних элементов), необходимо переопределить ControlTemplate из TreeViewItem.

Следующее Style взято из Документы Microsoft: стили и шаблоны TreeView и сокращены для отображения соответствующего кода. Перейдите по ссылке, чтобы получить полный код.

<Style x:Key="{x:Type TreeViewItem}"
       TargetType="{x:Type TreeViewItem}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TreeViewItem}">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="19"
                              Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
          </Grid.RowDefinitions>
          <VisualStateManager.VisualStateGroups>
            ...
          </VisualStateManager.VisualStateGroups>

          <!-- Use Margin to modify the position of the "Expander" ToggleButton -->
          <ToggleButton x:Name="Expander"
                        Style="{StaticResource ExpandCollapseToggleStyle}"
                        ClickMode="Press"
                        IsChecked="{Binding IsExpanded, 
            RelativeSource={RelativeSource TemplatedParent}}"/>

          <Border x:Name="Bd"
                  Grid.Column="1"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  Padding="{TemplateBinding Padding}">

            <!-- Modify e.g. Margin to  change the position of the Header (parent item) -->
            <ContentPresenter x:Name="PART_Header"
                              ContentSource="Header"
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
          </Border>

          <!-- Modify e.g. using Margin to reposition the expanded child items -->
          <ItemsPresenter x:Name="ItemsHost"
                          Grid.Row="1"
                          Grid.Column="1"
                          Grid.ColumnSpan="2"
                          Visibility="Collapsed" />
        </Grid>

         ...


      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...