2012-09-11 16 views
10

私はScrollViewerを持つアプリを持っています。 2つのスクロールバーが会う場所は迷惑な小さな広場です(下のimgを参照)。私は取り除こうとしています。私はアプリを "スヌープ"するとき、私はそれを "長方形"として見つけることができますが、私はScrollViewerのその部分を想定していますか?スクロールバーが会う厄介な広場

私は検索しましたし、この上の任意の情報を検索しますが、私は見つけることができるすべてはそれの上に何かを置くことによって、それを隠すための提案は次のとおりです。■

これをソートする誰もが正しい方向に私を指すことができますか?

Annoying Little Square

<ControlTemplate x:Key="HorizontalScrollBar" 
     TargetType="{x:Type ScrollBar}"> 
     <Grid > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition MaxWidth="18"/> 
       <ColumnDefinition Width="0.00001*"/> 
       <ColumnDefinition MaxWidth="18"/> 
      </Grid.ColumnDefinitions> 
      <Border 
       Grid.ColumnSpan="3" 
       CornerRadius="2" 
       Background="Transparent" /> 
      <RepeatButton 
       Grid.Column="0"       
       Style="{StaticResource ScrollBarLineButton}" 
       Width="18" 
       Command="ScrollBar.LineLeftCommand" 
       Content="M 4 0 L 4 8 L 0 4 Z" /> 
      <Track 
       Name="PART_Track" 
       Grid.Column="1" 
       IsDirectionReversed="False"> 
       <Track.DecreaseRepeatButton> 
        <RepeatButton 
         Style="{StaticResource ScrollBarPageButton}" 
         Command="ScrollBar.PageLeftCommand" /> 
       </Track.DecreaseRepeatButton> 
       <Track.Thumb> 
        <Thumb 
         Style="{StaticResource ScrollBarThumb}" 
         Margin="0,1,0,1" 
         Background="{DynamicResource NormalBrush}" 
         BorderBrush="{DynamicResource NormalBorderBrush}" /> 
       </Track.Thumb> 
       <Track.IncreaseRepeatButton> 
        <RepeatButton 
         Style="{StaticResource ScrollBarPageButton}" 
         Command="ScrollBar.PageRightCommand" /> 
       </Track.IncreaseRepeatButton> 
      </Track> 
      <RepeatButton 
       Grid.Column="3" 
       Style="{StaticResource ScrollBarLineButton}" 
       Width="18" 
       Command="ScrollBar.LineRightCommand" 
       Content="M 0 0 L 4 4 L 0 8 Z"/> 
     </Grid> 
    </ControlTemplate> 
+0

どのようにスクロールバーの色を取得していますか? – Paparazzi

+0

私はWPFの専門家ではなく、私はすべてを理解しているとは言えませんが、このコントロールテンプレートから来ていることがわかります – Fred

+0

おそらくそれを破っているのではなくGrid.Column = "3"が範囲外です。 – Paparazzi

答えて

11

私は、まったく同じ問題を抱えて、しかし、私のためにそれを解決するために、スタック上でここにこの答えを見つけました:

Can't fully style a ListBox/Scrollviewer in WPF

ソリューションがないことが、四角の代わりに何かを置くと、ControlTemplate(ScrollViewer コントロールの上に何かを置くというバブルガムパッチの手法ではなく、ScrollViewerで、ScrollBarではなく)。

しかし、私は、そのテンプレートからRectangleの定義を省略するだけで、迷惑なコーナースクエアが消えてしまうことを発見しました。つまり、ScrollViewerの背景色が何であれ(この例では、 ScrollViewerの背景色を設定したい場合は、GridのBackgroundプロパティを設定するだけです)。

だからあなたのリソースにこれを追加してみてください:

<Style TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <ScrollContentPresenter Grid.Column="0" /> 
        <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="1" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
        <ScrollBar x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Grid.Column="0" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
        <!--<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>--> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+1

将来参照するために、回答に含める複数行のコードブロックがある場合は、それを選択して '{}'でボタンをクリックすると読みやすくなります。バックチックを使わずにブロック全体にコードの書式を適用しますバックチックはうまくフォーマットされないので、 – RobV

+1

Hehe、私はやっていない;) – d7samurai

+0

OK、問題ありません:) – RobV

0

あなたがコードに続く空きスペースの使用を削除したい場合は、次の

<Style TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <ScrollContentPresenter Grid.Column="0" /> 
        <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="1" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
        <ScrollBar x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

2年前に投稿された回答とあなたの回答はどのように異なっていますか? – Fred

+1

私の答えでは、水平スクロールバーにColumnSpanを使用しました。だから、空白が消えるのです。垂直スクロールバーで塗りつぶしたい場合は、ColumnSpanを削除し、垂直スクロールバーにRowSpanを追加してください。 – dzwonu

+0

乾杯、私はそれを行こう。 – Fred

0

マークされた答えは、右私のためにそれをしませんでした。これはしました。

<Style TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid Background="{TemplateBinding Panel.Background}"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="Auto" /> 
        </Grid.RowDefinitions> 
        <!--<Rectangle Grid.Column="1" Grid.Row="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />--> 
        <ScrollContentPresenter Grid.Column="0" Grid.Row="0" Margin="{TemplateBinding Control.Padding}" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" CanContentScroll="{TemplateBinding ScrollViewer.CanContentScroll}" /> 
        <ScrollBar Grid.Column="1" Grid.Row="0" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" Cursor="Arrow" AutomationProperties.AutomationId="VerticalScrollBar" /> 
        <ScrollBar Orientation="Horizontal" Grid.Column="0" Grid.Row="1" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Value="{Binding Path=HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}" Cursor="Arrow" AutomationProperties.AutomationId="HorizontalScrollBar" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
関連する問題