【问题标题】:Access HorizontalOffset from ScrollViewer in Datagrid从 Datagrid 中的 ScrollViewer 访问 Horizo​​ntalOffset
【发布时间】:2011-02-02 15:52:10
【问题描述】:

我有一个来自 Silverligt 4.0 SDK 的 DataGrid。我想从 DataGrid 的内部 ScrollViewer 访问“Horizo​​ntalOffset”。我可以访问它的附加属性,例如:

<data:DataGrid x:Name="MyGrid"
               ItemsSource="{Binding Elements}"
               ScrollViewer.HorizontalScrollBarVisibility="Visible">

但是如何访问 ScrollViewers Horizo​​ntalOffset 属性?如果我可以在 XAML 中绑定它会很好,但从后面的代码中访问它就足够了。

我试图通过在后面的代码中从 DataGrid 中迭代可视化树来找到它,但我无法掌握它(滚动条始终为空)。我尝试了几种不同的 FindVisualChild() 实现。

var scroller = MyGrid.FindVisualChild<ScrollViewer>();

【问题讨论】:

    标签: silverlight silverlight-4.0 datagrid


    【解决方案1】:

    这可能与DataGrid 不使用ScrollViewer 的事实有关

    默认模板管理自己的滚动并包括两个滚动条。因此,您需要访问水平滚动条。

    我使用我自己的VisualTreeEnumeration 类代码,您可以找到here

    var scrollBar = MyGrid.Descendents()
                          .OfType<ScrollBar>()
                          .FirstOrDefault(sb => sb.Name == "HorizontalScrollbar");
    

    【讨论】:

      【解决方案2】:

      尽管您接受的答案表明DataGrid 不使用ScrollViewer,但似乎DataGrid 的第一个视觉子代是Border,其子代为ScrollViewer。因此,您可以使用以下方式访问ScrollViewer

      let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
      let scroll = border.Child :?> Controls.ScrollViewer
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-21
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 2016-01-19
        • 1970-01-01
        相关资源
        最近更新 更多