2015-07-24 2 views
1

Мне было интересно, можно ли вставить мои собственные растровые изображения для стилуса прокрутки. Я хотел бы использовать изображение для стрелок вверх, вниз, фона и скроллера. Это то, что я должен начать с, но я просто не знаю, как получить доступ к этим указанным свойствам:Как стиль TextBox ScrollBar с моими собственными изображениями?

<TextBox Name="SlideNotes" Foreground="White" FontSize="20" FontWeight="Bold" Background="Transparent" BorderThickness="0" TextWrapping="Wrap" AcceptsReturn="True" ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.Row="27" Grid.Column="11" Grid.ColumnSpan="46" Grid.RowSpan="5"> 
       <TextBox.Resources> 
        <Style TargetType="{x:Type ScrollBar}"> 
         <Setter Property="Background" Value="Red"/> 

        </Style> 
       </TextBox.Resources> 

Я был бы признателен за любую помощь.

+1

Там же на самом деле 'ImageBrush' класс, который можно использовать для установки изображения на любое имущество, которое использует кисть (' Фона ',' Foreground', 'BorderBrush',' Fill' и т. Д.) – almulo

+0

@ almulo Можете ли вы предоставить образец кода? – Ivan

+0

Я мог бы, но MSDN собирается сделать его намного лучше меня;) https://msdn.microsoft.com/en-us/library/ms749021(v=vs.100).aspx – almulo

ответ

0

Вы можете использовать ImageBrush, чтобы установить изображение в любое имущество, которое использует кисть (Background, Foreground, BorderBrush, Fill и т.д.).

В вашем случае, вы будете использовать его как это:

<TextBox Name="SlideNotes" Foreground="White" FontSize="20" FontWeight="Bold" Background="Transparent" BorderThickness="0" TextWrapping="Wrap" AcceptsReturn="True" ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.Row="27" Grid.Column="11" Grid.ColumnSpan="46" Grid.RowSpan="5"> 
    <TextBox.Resources> 
     <Style TargetType="{x:Type ScrollBar}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <ImageBrush ImageSource="yourimage.jpg" Stretch="Fill" /> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TextBox.Resources> 
</TextBox> 

ImageBrush (и все другие кисти, которые наследуют от TileBrush) имеет набор свойств, которые контролируют, как показано изображение. Я использовал Stretch="Fill" в своем примере, который заставит изображение растянуться, чтобы заполнить все свободное пространство, но вы можете хотеть, чтобы он вел себя по-другому.

Например, это ...

<ImageBrush ImageSource="yourimage.jpg" Stretch="None" TileMode="FlipXY" /> 

Сделает ваш повтор изображения, с плитки в качестве альтернативы переворачивается по горизонтали и/или по вертикали.

Игрушка вокруг с Stretch и TileMode (или даже ViewPort, ViewPortUnit, Viewbox и ViewboxUnit, если вы чувствуете себя достаточно смелым), чтобы получить эффект, который вы хотите.

EDIT - Как RepeatButton, шаблон по умолчанию ScrollBar, кажется, в значительной степени игнорировать Background собственность, большую часть времени, а также другие свойства, которые вы могли бы использовать для настройки ... Это означает, что вы, вероятно, чтобы переопределить весь шаблон, чтобы настроить его по своему вкусу.

Вот один ScrollBar пример шаблона: ScrollBar Styles and Templates

И вот еще для RepeatButton: RepeatButton Styles and Templates

+0

Большое вам спасибо. Я скопировал весь шаблон, но код жалуется на статические ресурсы, например: Value = "{StaticResource DisabledForegroundColor}". Isimply удалил все эти строки, но затем основное сбой приложения – Ivan

+0

, и если бы вы могли просто указать, где в шаблоне я должен добавить строки для кисти изображения. – Ivan

+0

Если вы проверили последнюю часть страниц MSDN, которые я связал, есть список ресурсов, необходимых для работы шаблонов. И чтобы изменить фон 'ScrollBar', я бы сказал, что лучше всего искать элемент' 'внутри шаблона (« Трек »- это то, что соединяет два 'RepeatButton' и где' Thumb' перемещается вверх и вниз. – almulo

0

Похоже, вы после ControlTemplate. См. here за хороший учебник о том, как его создать.

Чтобы избежать стилизаций весьScrollViewer, вы можете вместо этого стиля толькоRepeatButton элемента, это будет делать вещи намного проще работать.

<Style TargetType="RepeatButton"> 
    <Setter Property="Background" Value="Red"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      ... 
     </Setter.Value> 
    </Setter> 
</Style> 

Вы, возможно, потребуется определить этот стиль в Window ресурсов, вместо TextBox ресурсов из-за объема.

См. documentation для RepeatButton стилей и шаблонов.

+0

Благодарим вас за ответ. Я попробовал просто изменить цвет переднего плана и фона «RepeatButton», но ничего не произошло. Как вы думаете, что неправильно? – Ivan

+1

Шаблон 'RepeatButton' не слишком удобен для настройки, вам, вероятно, придется переопределить весь шаблон ... Осмотрите« RepeatButton ControlTemplate », чтобы найти шаблон по умолчанию, скопировать его и изменить его, как вы сочтете нужным. Например: https://msdn.microsoft.com/en-us/library/ff468219(v=vs.100).aspx – almulo

Смежные вопросы