2013-07-27 2 views
3

ScrollBar에 새 스타일을 적용하기 만하면 DataGridScrollBar의 모양과 느낌을 WPF에서 사용자 지정해 보았습니다. 이 스타일은 ScrollBarTemplate을 새 것으로 바꿉니다. 거의 Thumb에 마우스를 올려 놓고 끌기로 드래그 할 수 없다는 점을 제외하고는 정상적으로 작동합니다. RepeatButtons (Line buttonsPage buttons 작업 OK)을 클릭하여 스크롤 할 수 있습니다. 저는 WPF에 대해 아직 익숙하지 않습니다. 문제가 무엇인지 모릅니다. 여기에 코드입니다 (조금 긴,하지만 신경 쓰지 마세요, 당신이 잘 알고 추측) :사용자 정의 ScrollBar DataGrid에서 Thumb을 드래그 할 수 없지만 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는 상호 작용 할 수없는 것 같다. 귀하의 도움을 높이 평가 될 것입니다. 감사!

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

작동하지 않습니다이 Thumb없이 다음과 같이 PART_Track의 이름을 추가하는 단지 Track에,

enter image description here

답변

1

모든 괜찮 : 여기

는 그리드의 스크린 샷입니다 .

참고 : 템플릿을 디자인하고 스타일을 디자인 할 때 적어도 원본 이름을 더 잘 보면서 패턴의 이름을 알아야합니다.

HereTemplate의 중요 부분에 대한 설명입니다.

+0

대단히 감사합니다. 어딘가에서 이름을 보았지만, 중요하다고 생각하지 않았습니다. 어쩌면 어딘가에서 사용되었을 것입니다 (내 xaml 코드가 아님). :) – Hopeless