Apache flex 如何使用vslider作为列表的滚动条?

Apache flex 如何使用vslider作为列表的滚动条?,apache-flex,flex4,flash-builder,flexbuilder,Apache Flex,Flex4,Flash Builder,Flexbuilder,如何使用vslider作为列表的滚动条?我有这个,但从这里想不出来: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/s

如何使用vslider作为列表的滚动条?我有这个,但从这里想不出来:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
           xmlns:mx="library://ns.adobe.com/flex/mx"     
           xmlns:s="library://ns.adobe.com/flex/spark"  height="100%" width="100%">

<s:VSlider id="slider" minimum="0" maximum="{listy.height}" liveDragging="true"/>

<s:List id="listy" width="50%" height="100">
    <s:layout>
        <s:VerticalLayout id="vLayout" verticalScrollPosition="{slider.value}" />
    </s:layout>

    <mx:ArrayCollection>
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
    </mx:ArrayCollection>
</s:List>
</s:Application>

闪光
经理
梦境编织者
冷饮
闪光
经理
梦境编织者
冷饮
闪光
经理
梦境编织者
冷饮

编辑:使用下面Nate的建议,我现在可以让它工作了,但是它同时显示了vslider和默认的滚动条。如何隐藏默认的滚动条?我尝试设置verticalScrollPolicy=“off”,但没有成功。thx

我建议你达到目标的最佳方式是剥皮。为
VScrollBar
创建外观与
VSlider
相同的外观。然后创建自定义的
Scroller
skin(将
spark.skins.spark.ScrollerSkin
作为一个模式),并在那里分配这些滚动器皮肤。然后创建自定义的
列表
皮肤(基于
spark.skins.spark.ListSkin
),并将
滚动条
皮肤分配给那里的
滚动条

在这种情况下,如果您(出于某种原因)必须使用原始
VSlider
,您需要编写自己的带有滑块的
滚动条
,并在
列表中使用它

我向你推荐第一种方法

如何使用vslider作为列表的滚动条?我有这个,但是 从这里看不出来:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
           xmlns:mx="library://ns.adobe.com/flex/mx"     
           xmlns:s="library://ns.adobe.com/flex/spark"  height="100%" width="100%">

<s:VSlider id="slider" minimum="0" maximum="{listy.height}" liveDragging="true"/>

<s:List id="listy" width="50%" height="100">
    <s:layout>
        <s:VerticalLayout id="vLayout" verticalScrollPosition="{slider.value}" />
    </s:layout>

    <mx:ArrayCollection>
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
        <fx:String>Flash</fx:String> 
        <fx:String>Director</fx:String> 
        <fx:String>Dreamweaver</fx:String> 
        <fx:String>ColdFusion</fx:String> 
    </mx:ArrayCollection>
</s:List>
</s:Application>
不幸的是,我认为如果没有重大的返工,这是不可能的

列表在ListSkin内部实现为滚动条和数据组。
滚动条有两个蒙皮部分,垂直滚动条和水平滚动条。您想用VSlider替换VericalScrollbar

不幸的是,skin需要一个VScrollBar实例,并且没有可以用来替换其中一个的接口类。(Scroller实现是使用Flex 2/3方法实现的,以使其难以扩展)

你一直在用黑魔法来完成这项任务


然而,尝试将VSCrollBar剥皮,使其看起来像一个VSlider似乎是你最好的选择。

这完全有可能,我的目标是证明它!别开玩笑了,在这里它只是一些简单的绑定工作,你非常接近

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
               xmlns:mx="library://ns.adobe.com/flex/mx"     
               xmlns:s="library://ns.adobe.com/flex/spark"  height="100%" width="100%">

    <s:Group>
        <s:layout>
            <s:HorizontalLayout/>
        </s:layout>

        <s:List id="listy" width="50%" height="100" 
                change="slider.value=listy.layout.verticalScrollPosition" creationComplete="
                listy.dataGroup.addEventListener(MouseEvent.MOUSE_WHEEL, function():void{
                    slider.value=listy.layout.verticalScrollPosition}
                );">
            <s:layout>
                <s:VerticalLayout id="vLayout" verticalScrollPosition="{slider.value}" />
            </s:layout>

            <mx:ArrayCollection>
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
                <fx:String>Flash</fx:String> 
                <fx:String>Director</fx:String> 
                <fx:String>Dreamweaver</fx:String> 
                <fx:String>ColdFusion</fx:String> 
            </mx:ArrayCollection>
        </s:List>

        <s:VSlider id="slider" height="{listy.height}" 
                   minimum="0" maximum="{listy.dataGroup.contentHeight - listy.height}" 
                   showDataTip="false" scaleY="-1" liveDragging="true"/> 

    </s:Group>
</s:Application>

闪光
经理
梦境编织者
冷饮
闪光
经理
梦境编织者
冷饮
闪光
经理
梦境编织者
冷饮

如果你不了解它的方式和原因,请告诉我:)

非常好。但是,如果我使用我的箭头键向下滚动列表,vslider不会跟随详细信息!J/k-我为您编辑过,请注意在列表组件中添加了:change=“slider.value=listy.layout.verticalScrollPosition”。这表示当所选项目更改时,更新vslider位置。你能解释一下鼠标不工作是什么意思吗?滑块仍然可用,箭头键移动滑块,还有什么其他的吗?当我使用鼠标滚轮向下滚动列表时,vslider不会移动(但滚动条会移动)。今天晚些时候我会为你看一看,我正在度假!w00t!