具有不同线条颜色的ListBox ScrollBar

阿莫尔·巴万那瓦(Amol Bavannavar)

我想自定义列表框vertical ScrollBar,以显示与蓝色标记当前选中的项目位置,就像我们在VS编辑,也想show background color of listboxitemvertical scrollbar线。

在此处输入图片说明

我怎样才能做到这一点?

酮弹

这是您的自定义ScrollViewer:

public class MyScrollViewer : ScrollViewer
{
    static MyScrollViewer()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyScrollViewer), new FrameworkPropertyMetadata(typeof(MyScrollViewer)));
    }


}

与它的XAML:

<Style TargetType="{x:Type local:MyScrollViewer}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyScrollViewer}">
                <Grid>
                    <ScrollContentPresenter />
                    <local:MyScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Value="{TemplateBinding HorizontalOffset}"
                             Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" 
                             Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这是ScrollViewer使用的自定义ScrollBar:

public class MyScrollBar : ScrollBar
{
    static MyScrollBar()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyScrollBar), new FrameworkPropertyMetadata(typeof(MyScrollBar)));
    }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        var canvas = Template.FindName("PART_Canvas", this) as Canvas;

        if (canvas != null)
        {
            //draw something onto the canvas
            Line myLine = new Line();

            myLine.Stroke = System.Windows.Media.Brushes.Red;

            myLine.X1 = 100;
            myLine.X2 = 140;  
            myLine.Y1 = 200;
            myLine.Y2 = 200;

            myLine.StrokeThickness = 1;

            canvas.Children.Add(myLine);
        }
    }
}

同样使用XAML:

<Style TargetType="{x:Type local:MyScrollBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyScrollBar}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <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" Width="18" Command="ScrollBar.LineLeftCommand" Content="M 4 0 L 4 8 L 0 4 Z" />
                        <Canvas x:Name="PART_Canvas" Grid.Column="1" />
                        <RepeatButton Grid.Column="2"  Width="18" Command="ScrollBar.LineRightCommand" Content="M 0 0 L 4 4 L 0 8 Z"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这是使用此控件的Windows:

<Window x:Class="VSScroller.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:VSScroller"
    Title="MainWindow" Height="350" Width="525">

<Grid>
    <local:MyScrollViewer HorizontalScrollBarVisibility="Visible" Background="Yellow">
        <TextBlock>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's <LineBreak/>
                   standard dummy text ever since the 1500s, when an unknown printer <LineBreak/>
            took a galley of type and scrambled it to make a <LineBreak/>
                   type specimen book. It has survived not only five centuries, <LineBreak/>
            but also the leap into electronic typesetting, remaining 
                   essentially unchanged. It was popularised in the 1960s with <LineBreak/>
            the release of Letraset sheets containing Lorem Ipsum passages, <LineBreak/>
                   and more recently with desktop publishing software like Aldus <LineBreak/>
            PageMaker including versions of Lorem Ipsum.</TextBlock>
    </local:MyScrollViewer>
</Grid>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ScrollView 中 ScrollBar 的颜色

来自分类Dev

更改ListView的ScrollBar / FastScroll颜色?

来自分类Dev

如何更改子图中不同线条的线条颜色

来自分类Dev

如何更改子图中不同线条的线条颜色

来自分类Dev

如何识别ListBox及其ScrollBar中的鼠标事件

来自分类Dev

css ::-webkit-scrollbar-thumb 不能改变比例(渐变颜色)

来自分类Dev

寻找不同线条的图案

来自分类Dev

有没有办法让 Highstock Scrollbar 响应触控板?

来自分类Dev

Android-在没有ScrollBar的情况下滚动

来自分类Dev

tkinter中带有ScrollBar的动态按钮-Python

来自分类Dev

Moving scrollbar

来自分类Dev

在Mayavi中绘制具有特定线条颜色的多条线条

来自分类Dev

在D3中使线条补丁具有不同的颜色

来自分类Dev

使用 D3 绘制具有两种不同颜色的线条

来自分类Dev

使用ScrollBar摆动JTable-标头和轨道之间的正方形颜色

来自分类Dev

如果绑定导致“ perfect-scrollbar.js”有问题,请剔除

来自分类Dev

WinRT ListView隐藏ScrollBar?

来自分类Dev

jQuery Automatically Scroll the Scrollbar

来自分类Dev

WPF ScrollBar样式

来自分类Dev

CardScrollView中的底部scrollBar

来自分类Dev

JavaFX ScrollBar值混淆

来自分类Dev

如何隐藏Scrollbar thumb?

来自分类Dev

TableLayoutPanel中的垂直ScrollBar

来自分类Dev

WinRT ListView隐藏ScrollBar?

来自分类Dev

如何隐藏Scrollbar thumb?

来自分类Dev

使用 Tkinter 'scrollbar' 可行

来自分类Dev

Windows服务中具有不同计时器的不同线程

来自分类Dev

没有获得用于打印具有不同线程的偶数和奇数的desried输出

来自分类Dev

ScrollBar Vb6查询