2013-07-27 3 views
3

Я пробовал настраивать внешний вид ScrollBarDataGrid в WPF, просто применяя новый стиль на ScrollBar. Этот стиль изменяет TemplateScrollBar на новый. Почти отлично работает, за исключением того, что я не могу удерживать мышь на Thumb и перетаскивать ее, чтобы прокрутить, я просто могу нажать на RepeatButtonsLine buttons, и Page buttons работать ОК) для прокрутки. Я все еще новичок в WPF, я не знаю, в чем проблема. Вот код (немного долго, но, пожалуйста, не возражает, я думаю, вы очень хорошо знакомы с этим):Пользовательский ScrollBar Thumb нельзя перетаскивать в DataGrid (но RepeatButtons работает нормально)?

<DataGrid HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding}" SnapsToDevicePixels="True"> 
     <DataGrid.Resources>     
      <Style TargetType="ScrollBar">      
       <Style.Resources> 
        <ControlTemplate x:Key="verRepeat" TargetType="RepeatButton"> 
         <Border CornerRadius="4" BorderBrush="Green" BorderThickness="1" Background="Yellow"> 
          <ContentPresenter Width="18" Height="18"/> 
         </Border> 
        </ControlTemplate> 
        <ControlTemplate x:Key="midRepeat" TargetType="RepeatButton"> 
         <Border Background="Transparent"> 
          <ContentPresenter/> 
         </Border> 
        </ControlTemplate> 

        <ControlTemplate x:Key="verScroll" TargetType="ScrollBar"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition MaxHeight="18"/> 
           <RowDefinition/> 
           <RowDefinition MaxHeight="18"/> 
          </Grid.RowDefinitions> 
          <Border Grid.RowSpan="3"/> 
          <RepeatButton Grid.Row="0" Width="18" Command="ScrollBar.LineUpCommand" Template="{StaticResource verRepeat}">          

          </RepeatButton> 
          <Track Grid.Row="1" IsDirectionReversed="True"> 
           <Track.DecreaseRepeatButton> 
            <RepeatButton Command="ScrollBar.PageUpCommand" Template="{StaticResource midRepeat}"> 

            </RepeatButton> 
           </Track.DecreaseRepeatButton> 
           <Track.Thumb> 
            <Thumb Margin="2,0,2,0"> 
             <Thumb.Template> 
              <ControlTemplate TargetType="Thumb"> 
               <Border Background="Green"/>              
              </ControlTemplate> 
             </Thumb.Template> 
            </Thumb> 
           </Track.Thumb> 
           <Track.IncreaseRepeatButton> 
            <RepeatButton Command="ScrollBar.PageDownCommand" Template="{StaticResource midRepeat}"> 

            </RepeatButton> 
           </Track.IncreaseRepeatButton> 
          </Track> 
          <RepeatButton Grid.Row="2" Command="ScrollBar.LineDownCommand" Template="{StaticResource verRepeat}"> 

          </RepeatButton> 
         </Grid> 
        </ControlTemplate> 

        <ControlTemplate x:Key="horScroll" TargetType="ScrollBar"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition MaxWidth="18"/> 
           <ColumnDefinition Width="0.00001*"/> 
           <ColumnDefinition MaxWidth="18"/> 
          </Grid.ColumnDefinitions> 
          <Border Grid.ColumnSpan="3"/> 
          <RepeatButton Grid.Column="0" Height="18" Command="ScrollBar.LineLeftCommand" Template="{StaticResource verRepeat}"> 

          </RepeatButton> 
          <Track Grid.Column="1" IsDirectionReversed="False" Focusable="False"> 
           <Track.DecreaseRepeatButton> 
            <RepeatButton Command="ScrollBar.PageLeftCommand" Template="{StaticResource midRepeat}"> 

            </RepeatButton> 
           </Track.DecreaseRepeatButton> 
           <Track.Thumb> 
            <Thumb> 
             <Thumb.Template> 
              <ControlTemplate TargetType="Thumb"> 
               <Grid> 
                <Border Background="Green" Margin="0,1,0,1"/> 
                <ContentPresenter Width="18" Height="18"/> 
               </Grid> 
              </ControlTemplate> 
             </Thumb.Template> 
            </Thumb> 
           </Track.Thumb> 
           <Track.IncreaseRepeatButton> 
            <RepeatButton Command="ScrollBar.PageRightCommand" Template="{StaticResource midRepeat}"> 

            </RepeatButton> 
           </Track.IncreaseRepeatButton> 
          </Track> 
          <RepeatButton Grid.Column="2" Command="ScrollBar.LineRightCommand" Template="{StaticResource verRepeat}"> 

          </RepeatButton> 
         </Grid> 
        </ControlTemplate> 
       </Style.Resources> 
       <Setter Property="OverridesDefaultStyle" Value="True"/>       
       <Style.Triggers> 
        <Trigger Property="Orientation" Value="Horizontal"> 
         <Setter Property="Template" Value="{StaticResource horScroll}"/> 
        </Trigger> 
        <Trigger Property="Orientation" Value="Vertical"> 
         <Setter Property="Template" Value="{StaticResource verScroll}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style>     
     </DataGrid.Resources> 
    </DataGrid> 

Я думаю, что я пропустил что-то здесь, то Thumb, кажется, не в состоянии взаимодействовать с. Ваша помощь будет высоко оценена. Благодаря!

Вот скриншот сетки:

enter image description here

ответ

1

Все отлично, только Track, чтобы добавить имя PART_Track следующим образом:

<Track x:Name="PART_Track" Grid.Row="1" IsDirectionReversed="True" ... /> 

Без этого Thumb не работает ,

Примечание: при разработке шаблона и стиля лучше взгляните на оригинал, по крайней мере, чтобы узнать имена шаблона.

Here - небольшое описание важных частей Template.

+0

Отлично, спасибо. Я где-то видел имена, но я не думал, что это важно, может быть, оно используется где-то (не в моем коде xaml) :) – Hopeless

 Смежные вопросы

  • Нет связанных вопросов^_^