2016-05-26 6 views
0

Я уже знаю, как отредактировать шаблон ScrollViewer, отредактировав копию его шаблона. Но как мне отредактировать прокрутку -that's-inside-the-ScrollViewer's Style?Как отредактировать стиль полосы прокрутки ScrollViewer?

(То, что я хочу, чтобы изменить BeginTime его FadeOut анимации, как предложено в this ответ. Я не хочу, чтобы изменить поведение всех ScrollBars' в приложении.)

Если есть какой-то способ сделайте это в коде вместо XAML, что было бы здорово.

ответ

1

Первый редактировать шаблон стиля скроллбара и поместить его в страницу ресурса , а затем использовать ключ («customScrollBar»), чтобы идентифицировать этот ресурс

Here это шаблон ScrollBar стиль для редактирования.

Изменить с учетом времени начала, которое вам подходит.

<Storyboard> 
    <FadeOutThemeAnimation BeginTime="1" TargetName="HorizontalPanningRoot" /> 
    <FadeOutThemeAnimation BeginTime="1" TargetName="VerticalPanningRoot" /> 
    <FadeOutThemeAnimation BeginTime="1" TargetName="HorizontalRoot" /> 
    <FadeOutThemeAnimation BeginTime="1" TargetName="VerticalRoot" /> 
</Storyboard> 

И добавить ниже ScrollViewer укладка

<Style x:Key="customScrollViewer" TargetType="ScrollViewer"> 
     <Setter Property="HorizontalScrollMode" Value="Auto" /> 
     <Setter Property="VerticalScrollMode" Value="Auto" /> 
     <Setter Property="IsHorizontalRailEnabled" Value="True" /> 
     <Setter Property="IsVerticalRailEnabled" Value="True" /> 
     <Setter Property="IsTabStop" Value="False" /> 
     <Setter Property="ZoomMode" Value="Disabled" /> 
     <Setter Property="HorizontalContentAlignment" Value="Left" /> 
     <Setter Property="VerticalContentAlignment" Value="Top" /> 
     <Setter Property="VerticalScrollBarVisibility" Value="Visible" /> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="BorderThickness" Value="0" /> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ScrollViewer"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="ScrollingIndicatorStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition From="MouseIndicator" To="NoIndicator"> 
             <Storyboard> 
              <FadeOutThemeAnimation TargetName="ScrollBarSeparator" BeginTime="0:0:3" /> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:3"> 
                <DiscreteObjectKeyFrame.Value> 
                 <ScrollingIndicatorMode>None</ScrollingIndicatorMode> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:3"> 
                <DiscreteObjectKeyFrame.Value> 
                 <ScrollingIndicatorMode>None</ScrollingIndicatorMode> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
            <VisualTransition From="TouchIndicator" To="NoIndicator"> 
             <Storyboard> 
              <FadeOutThemeAnimation TargetName="ScrollBarSeparator" /> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0.5"> 
                <DiscreteObjectKeyFrame.Value> 
                 <ScrollingIndicatorMode>None</ScrollingIndicatorMode> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0.5"> 
                <DiscreteObjectKeyFrame.Value> 
                 <ScrollingIndicatorMode>None</ScrollingIndicatorMode> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
           </VisualStateGroup.Transitions> 

           <VisualState x:Name="NoIndicator"> 
            <Storyboard> 
             <FadeOutThemeAnimation TargetName="ScrollBarSeparator" /> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="TouchIndicator"> 
            <Storyboard> 
             <FadeOutThemeAnimation TargetName="ScrollBarSeparator" /> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode" 
              Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <ScrollingIndicatorMode>TouchIndicator</ScrollingIndicatorMode> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode" 
              Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <ScrollingIndicatorMode>TouchIndicator</ScrollingIndicatorMode> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="MouseIndicator"> 
            <Storyboard> 
             <FadeInThemeAnimation TargetName="ScrollBarSeparator" /> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode" 
              Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <ScrollingIndicatorMode>MouseIndicator</ScrollingIndicatorMode> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalScrollBar" 
              Storyboard.TargetProperty="IndicatorMode" 
              Duration="0"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <ScrollingIndicatorMode>MouseIndicator</ScrollingIndicatorMode> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Grid Background="{TemplateBinding Background}"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="*" /> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 
          <ScrollContentPresenter x:Name="ScrollContentPresenter" 
           Grid.RowSpan="2" 
           Grid.ColumnSpan="2" 
           ContentTemplate="{TemplateBinding ContentTemplate}" 
           Margin="{TemplateBinding Padding}" /> 
          <ScrollBar x:Name="VerticalScrollBar" Style="{StaticResource customScrollBar}" 
               Grid.Column="1" 
               IsTabStop="False" 
               Maximum="{TemplateBinding ScrollableHeight}" 
               Orientation="Vertical" 
               Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
               Value="{TemplateBinding VerticalOffset}" 
               ViewportSize="{TemplateBinding ViewportHeight}" 
               HorizontalAlignment="Right" /> 
          <ScrollBar x:Name="HorizontalScrollBar" 
           IsTabStop="False" 
           Maximum="{TemplateBinding ScrollableWidth}" 
           Orientation="Horizontal" 
           Grid.Row="1" 
           Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
           Value="{TemplateBinding HorizontalOffset}" 
           ViewportSize="{TemplateBinding ViewportWidth}" /> 
          <Border x:Name="ScrollBarSeparator" 
       Grid.Row="1" 
       Grid.Column="1" 
       Background="{ThemeResource SystemControlPageBackgroundChromeLowBrush}" /> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Обратите внимание, как я добавил стиль "customScrollBar" в приведенном выше ScrollViewer.

+0

Ну, вы размещаете стиль отредактированной полосы прокрутки внутри scrollviewer. – AbsoluteSith

+0

Извините. Я получил его после написания моего комментария, поэтому я удалил свой комментарий. Я проверю это сейчас. Благодарю. – ispiro

+0

Спасибо. Кажется, это то, что я ищу. (К сожалению, он не решает мою проблему в моем первоначальном вопросе [здесь] (http://stackoverflow.com/questions/37389446/change-default-time-of-auto-hide-timer-of-scrollviewer-scrollbars) потому что все Begin Times уже равны 0, поэтому проблема, вероятно, связана с самим ScrollViewer.) – ispiro