为什么我的一个ScrollViewer命令无法在ListBox模板中运行?

时间:2010-09-09 00:04:26

标签: .net wpf xaml pixelsense

这里遇到了一个奇怪的问题。我已经基于标准模板为ListBox创建了一个模板(即除了我在下面指出的内容之外,我没有更改任何内容)。

我正在尝试在模板的侧面添加几个按钮,以便我可以向左和向右滚动ScrollViewer(它是标准ListBox模板的一部分)。 问题是它只能识别ScrollBar.PageLeftCommand或ScrollBar.PageRightCommand ......我无法让它对两者做出响应。

换句话说,如果我点击右键,它会向右翻页,但是如果我点击左键,它就不会做任何事情。取决于XAML中按钮的顺序,它将指示哪个命令有效,哪个不起作用(看起来该命令适用于XAML中定义的最后一个按钮)。

<ControlTemplate TargetType="{x:Type s:SurfaceListBox}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.137*"/>
            <ColumnDefinition Width="0.726*"/>
            <ColumnDefinition Width="0.137*"/>
        </Grid.ColumnDefinitions>
        <Border x:Name="Border"  Grid.ColumnSpan="1" Grid.Column="1">
            <s:SurfaceScrollViewer x:Name="scrollViewer" >
                <ItemsPresenter />
            </s:SurfaceScrollViewer>
        </Border>
        <s:SurfaceButton x:Name="rightScroll" Content="&gt;" Command="ScrollBar.PageRightCommand" CommandTarget="{Binding ElementName=scrollViewer}" Grid.Column="2" />
        <s:SurfaceButton x:Name="leftScroll" Content="&lt;" Command="ScrollBar.PageLeftCommand" CommandTarget="{Binding ElementName=scrollViewer}"/>
    </Grid>
</ControlTemplate>

(是的,这是使用Surface类,但我已尝试使用普通类,我得到相同的行为..)

我已经看过它与Snoop一起运行,但它告诉我没有任何关于命令的用处 - 根据Snoop,两个命令都已成功处理!

2 个答案:

答案 0 :(得分:2)

标准WPF控件不支持SurfaceScrollViewer的所有事件,但是,SurfaceScrollViewer还包含其他支持某些事件的控件,如Click。

问题是SurfaceScrollViewer不仅接受滚动条上的触摸输入,还接受内容本身。

答案 1 :(得分:0)

好的,我撒了谎。我没有尝试将SurfaceScrollViewer替换为普通ScrollViewer

当我这样做时,似乎有效。因此,除非有人提出任何其他建议,否则SurfaceScrollViewer至少会出现两个错误(我发现第二个是ScrollBar在隐藏隐藏命令时不响应命令ScrollViewer })。

再次挫败。

: - (