【问题标题】:Silverlight ScrollViewer takes focus when scrollbars are not visibleSilverlight ScrollViewer 在滚动条不可见时获得焦点
【发布时间】:2012-02-25 03:45:52
【问题描述】:

我发现即使滚动条不可见,Silverlight 的 ScrollViewer 仍会获得焦点。

有其他人看到这个问题吗?当滚动条不可见时,是否有任何解决方法可以防止 ScrollViewer 充当制表位?

谢谢,

【问题讨论】:

    标签: silverlight scrollviewer


    【解决方案1】:

    怎么样:

    <ScrollViewer IsTabStop="False" ...
    

    【讨论】:

    • 这正是我所做的,但它不是解决方案。 IsTabStop 设置为 true 的 ScrollViewer 的行为应使其仅在有滚动条可聚焦时才聚焦。我想这一定是一个错误。
    • 不确定我是否同意。 ScrollViewer 本身就是一个控件,无论滚动条(子控件)是否可见。如果您只希望控件在其滚动条可见时获得焦点,您可以绑定Focusable,使其仅在范围超出视口时为true
    • 滚动查看器在不需要滚动条时充当不可见的制表符,这对我来说似乎是不正确的行为。任何考虑键盘交互的人都会发现在使用 Tab 键导航时需要额外的按键操作。
    • ...但我没有考虑滚动条不可见时滚动查看器的行为方式,因为它们已被明确设置或设置样式,并且内容仍然大于视口。在这种情况下,开发人员可能希望焦点转到滚动查看器。
    【解决方案2】:

    至少在 Silverilght 4 及更高版本中有一个简单的解决方案。监听 ScrollViewer 上的 LayoutUpdated 事件,并根据滚动条的状态设置 IsTabStop 属性。

    例如,如果您只使用垂直滚动条:

    void myScrollViewer_LayoutUpdated(object sender, EventArgs e)
    {
        //this should only be a tabstop if the scrollbar is visible.
        myScrollViewer.IsTabStop = 
           (myScrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多