2013-07-27 30 views
3

我试过在ScrollBar上简单地应用新样式来自定义WPF中DataGridScrollBar的外观。该样式将ScrollBarTemplate更改为新的。几乎可以正常工作,但我无法在Thumb上按住鼠标并拖动滚动,我只需点击RepeatButtonsLine buttonsPage buttons工作正常)即可滚动。我还是WPF的新手,我不知道这里可能会出现什么问题。下面是代码(有点长,但请不要介意,我想你很熟悉):自定义ScrollBar拇指不能在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

相关问题