none
Scroll в TreeListView RRS feed

  • Вопрос

  • Использовал для создания TreeListView пример с msdn http://msdn.microsoft.com/ru-ru/library/ms771523(v=vs.90).aspx

    Все заработало но нет скрола. Пробовал так

     <Style TargetType="{x:Type l:TreeListView}"><br/>      <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type l:TreeListView}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="White" BorderThickness="{TemplateBinding BorderThickness}">
                  <DockPanel>                
                    <GridViewHeaderRowPresenter Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top" />
                    <ItemsPresenter/>
                    <ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible" DockPanel.Dock="Top">
                      <ItemsPresenter />
                    </ScrollViewer>
                  </DockPanel>
                </Border>            
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
    
     Скрол появился но он не рабочий. Я так понимаю его как то к дереву привязать надо? Как сделать его рабочим?

     

    25 марта 2011 г. 19:19

Ответы

  • Все! Разобрался!

    <Style TargetType="{x:Type l:TreeListView}"> <!-- Стиль для самого поля для вывода инфв. надо сделать скрол -->
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type l:TreeListView}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="White" BorderThickness="{TemplateBinding BorderThickness}">              
                    <DockPanel>                                                    
                      <GridViewHeaderRowPresenter Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top" />
                      <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" DockPanel.Dock="Top">
                        <DockPanel>
                         <ItemsPresenter/>
                        </DockPanel>
                      </ScrollViewer>
                  </DockPanel>              
                </Border>            
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
    

    • Помечено в качестве ответа firefox0013 28 марта 2011 г. 2:54
    28 марта 2011 г. 2:36

Все ответы

  • <TreeListView ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Visible">
    ...

    В TreeView уже втроен свой ScrollViewer, поэтому можно просто выставить нужные значения у нужных свойств.

    25 марта 2011 г. 20:23
    Отвечающий
  • На удивление не помогло. Скрол совсем пропал.
    26 марта 2011 г. 3:43
  • Попробуйте просто обернуть TreeListView в ScrollViewer.
    [My blog] [My E-mail]
    26 марта 2011 г. 23:56
  • Сработало

    <ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible" DockPanel.Dock="Top">       
          <l:TreeListView x:Name="Tree" TextOptions.TextRenderingMode="ClearType" DockPanel.Dock="Top" Margin="1,0,0,0" BorderThickness="1" SelectedItemChanged="headersTree_SelectedItemChanged"
               FontFamily="Courier New" FontSize="13" FontWeight="Medium" Foreground="Black" >
            <l:TreeListView.Columns>
              <GridViewColumn Header="col1" CellTemplate="{StaticResource CellTemplate_Offset}" Width="100"/>
              <GridViewColumn Header="col2" CellTemplate="{StaticResource CellTemplate_Name}" Width="220" />        
            </l:TreeListView.Columns>
          </l:TreeListView>        
     </ScrollViewer>
    
     Но скрол налазит на названия столбцов. можно ли его уменьшить? задать Height жестко нельзя. задается размер сразу для всего и дерево не растягивается при растягивании формы.

    27 марта 2011 г. 4:52
  • Попробуйте задать высоту строки со значением Auto.

    <Grid Height="268" HorizontalAlignment="Left" Margin="162,36,0,0" Name="grid1" VerticalAlignment="Top" Width="339">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="48*" />
                    <ColumnDefinition Width="60*" />
                    <ColumnDefinition Width="88*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition />
                </Grid.RowDefinitions>
    			
            	<ScrollViewer Grid.Column="1" Grid.Row="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
            		<Border Width="100" Height="100">
            		<Border.Background>
            		  	<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            		  		<GradientStop Color="#FF393939" Offset="0"/>
            		  		<GradientStop Color="White" Offset="1"/>
            		  	</LinearGradientBrush>
            		</Border.Background></Border>   	
    			</ScrollViewer>
            </Grid>


    [My blog] [My E-mail]
    27 марта 2011 г. 8:16
  • На удивление не помогло. Скрол совсем пропал.

    Похоже вы делаете прокрутку по горизонтали. Если так, то измените следующим образом:

    <TreeListView ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Hidden">
    

    [My blog] [My E-mail]

    27 марта 2011 г. 10:05
  • Мне нужна и горизонтальная и вертикальная. При обертывании

     <Style TargetType="{x:Type l:TreeListView}"> <!-- Стиль для самого поля для вывода инфв. надо сделать скрол -->
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type l:TreeListView}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="White" BorderThickness="{TemplateBinding BorderThickness}">
                  <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" DockPanel.Dock="Top">
                    <DockPanel>
                      <GridViewHeaderRowPresenter Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top" />
                      <ItemsPresenter/>
                    </DockPanel>
                  </ScrollViewer>
                </Border>            
              </ControlTemplate>
            </Setter.Value>
          </Setter>
     </Style>
    
     Все работает. но при прокрутке вверх уползают названия столбцов. Нельзя ли как то боернуть внутренность столбцов не захватывая их заголовки?

    27 марта 2011 г. 14:19
  • Пробовал так.

     

     <Style TargetType="{x:Type l:TreeListView}"> <!-- Стиль для самого поля для вывода инфв. надо сделать скрол -->
      <Setter Property="Template">
      <Setter.Value>
       <ControlTemplate TargetType="{x:Type l:TreeListView}">
       <Border BorderBrush="{TemplateBinding BorderBrush}" Background="White" BorderThickness="{TemplateBinding BorderThickness}">    
        <DockPanel>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" DockPanel.Dock="Top">        
         <GridViewHeaderRowPresenter Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top" />
         <ItemsPresenter/>
        </ScrollViewer>
        </DockPanel>    
       </Border>   
       </ControlTemplate>
      </Setter.Value>
      </Setter>
     </Style>
    
    Но появляется ошибка: Свойство Content установлено больше одного раза.

     



    28 марта 2011 г. 2:20
  • Все! Разобрался!

    <Style TargetType="{x:Type l:TreeListView}"> <!-- Стиль для самого поля для вывода инфв. надо сделать скрол -->
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type l:TreeListView}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="White" BorderThickness="{TemplateBinding BorderThickness}">              
                    <DockPanel>                                                    
                      <GridViewHeaderRowPresenter Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top" />
                      <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" DockPanel.Dock="Top">
                        <DockPanel>
                         <ItemsPresenter/>
                        </DockPanel>
                      </ScrollViewer>
                  </DockPanel>              
                </Border>            
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
    

    • Помечено в качестве ответа firefox0013 28 марта 2011 г. 2:54
    28 марта 2011 г. 2:36