2017-02-04 13 views
0

スクロールバーの最小サイズを不当に小さく変更しないようにするために、次のコードを使用します。 StaticResourceを使用しているすべてのインスタンスは、 "リソース" x "を解決できません。私はDynamicResourceに変更しようとしましたが、これはエラーを除去し、正しく実行されますが、代わりにスクロールバーのように見えないものがあります。私はもう1つの提案hereを試しましたが、ほとんど同じような結果がスクロールバーのように見えました。また、私は、テキストボックスクラスで実装されているスクロールバーに頼っているので、スクロールバーを拡張するという贅沢はありません。WPFスタイルでスクロールバーのサムサイズを設定すると、すべてのスタイルがコントロールから削除されます

コントロールのスタイルを完全に破棄せずに、テキストボックスのスクロールバーの最小サイズを修正するためにスタイルを使用する方法を教えてください。

this Microsoft pageから次のコードを取得しました。

<Style TargetType="ScrollBar"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="ScrollBar"> 
      <Grid Name="Bg" 
       Background="{TemplateBinding Background}" 
       SnapsToDevicePixels="true"> 
      <Grid.RowDefinitions> 
       <RowDefinition MaxHeight="{DynamicResource 
       {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}"/> 
       <RowDefinition Height="0.00001*"/> 
       <RowDefinition MaxHeight="{DynamicResource 
       {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}"/> 
      </Grid.RowDefinitions> 
      <RepeatButton Style="{StaticResource ScrollBarButton}" 
          IsEnabled="{TemplateBinding IsMouseOver}" 
          Height="18" 
          Command="ScrollBar.LineUpCommand" 
          Content="M 0 4 L 8 4 L 4 0 Z" /> 
      <Track Name="PART_Track" 
       IsDirectionReversed="true" 
       Grid.Row="1" 
       Grid.ZIndex="-1"> 
       <Track.Resources> 
       <!-- Set the Thumb's minimum height to 50. 
       The Thumb's minimum height is half the 
       value of VerticalScrollBarButtonHeightKey. --> 
       <sys:Double 
        x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}"> 
        100 
       </sys:Double> 
       </Track.Resources> 
       <Track.DecreaseRepeatButton> 
       <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" 
           Command="ScrollBar.PageUpCommand"/> 
       </Track.DecreaseRepeatButton> 
       <Track.IncreaseRepeatButton> 
       <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" 
           Command="ScrollBar.PageDownCommand"/> 
       </Track.IncreaseRepeatButton> 
       <Track.Thumb> 
       <Thumb/> 
       </Track.Thumb> 
      </Track> 
      <RepeatButton 
       Grid.Row="2" 
       Style="{StaticResource ScrollBarButton}" 
       Height="18" 
       Command="ScrollBar.LineDownCommand" 
       Content="M 0 0 L 4 4 L 8 0 Z"/> 
      </Grid> 
      <ControlTemplate.Triggers> 
      <Trigger SourceName="PART_Track" 
        Property="IsEnabled" Value="false"> 
       <Setter TargetName="PART_Track" 
         Property="Visibility" Value="Hidden"/> 
      </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 

以下は、このウィンドウの基本的な例です。

<Window x:Class="TriggersNotepad.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:TriggersNotepad" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     mc:Ignorable="d" 
     Title="Trigger's Notepad" Height="350" Width="525" ResizeMode="CanResizeWithGrip"> 
    <Window.Resources> 
     Code above... 
    </Window.Resources> 
    <TextBox AcceptsReturn="True" UseLayoutRounding="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" BorderThickness="0"/> 
</Window> 

答えて

0

2つの方法があります:堅いものと簡単なものがあります。

まず、ハードなものから始めましょう。順番に、より柔軟です。コントロールのデフォルトスタイルを微調整するには、を参照するすべてのリソースを含むスタイル全体をコピーする必要があります。 Visual Studioを使用してスタイルをMSDNで調べる必要はありません。

  1. XAMLデザインウィンドウで、調整するコントロールを選択します。あなたの場合は<ScrollBar/>を作成し、デザイナーで選択する必要があります。
  2. メインメニューで、[書式] - [スタイルの編集] - [コピーの編集...] - [すべてに適用] - [OK]をクリックします。
  3. 必要に応じてスタイルを変更します。

そして今、簡単に1:

  1. BasedOnデフォルトのスタイルで新しいスタイルを作成します。
  2. デフォルトのスタイルで使用されているリソースを<Style.Resources>に置き換えてオーバーライドします。ここで

例です。

<Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource {x:Type ScrollBar}}"> 
    <Style.Resources> 
     <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}">42</sys:Double> 
     <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">42</sys:Double> 
     <sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">42</sys:Double> 
     <sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}">42</sys:Double> 
    </Style.Resources> 
</Style> 

そして、ここでは何を得るのスクリーンショットです:

enter image description here

・ホープ、このことができます!

+0

これには1つの問題があります。少なくともWindows 7では、親指のサイズを変更すると、上下左右のスクロールボタンのサイズも大きくなります。親指は妥当なサイズになりましたが、他のボタンでは、ストレッチで悲しいほど悪く見えるだけです。 (Horizo​​ntalからVerticalプロパティとHeightプロパティからWidthプロパティを削除したことに注意してください) –

+0

残念ながら、Windows 7のテーマ(Aero.NormalColor.xaml)は、Microsoft.Windows.Themes.ScrollChrome'を使用してサムの矢印をレンダリングします。これはカスタムを尊重しません親指のサイズ。スタイルのコピーを作成し、 'ScaleTransform'を' RepeatButton'の中の 'ScrollChrome'に適用することができます。 – Yarik

+0

ありがとうございます。 :)最後に私は元の答えと一緒に行った。私はそれをちょうど通常の最小親指のサイズを取得するために十分に伸ばした。それはあまりにも多くのぼんやりとした矢印ボタンが付いている。 –

関連する問題