检测滚动条属于哪个元素

问题描述:

我有一个比较复杂的布局。它由以下部分组成: 一列三行的网格。 在第一行(给我麻烦)我有一个开发人员快速组件 - 另一个GridControl。检测滚动条属于哪个元素

我的问题是,虽然第一行的高度是自动,纵向滚动条显示,即使有足够的空间用于内容。

我试过在行的rowdefinition上设置ScrollViewer.VerticalScrollBarVisibility =“Hidden”,但这没有帮助。

同样,我已经设置内GridControl不使用滚动条(使用某些Developer速成魔法 - 不仅仅是因为ScrollViewer中这不工作)

然而,无论我做什么,在出现该死的滚动条...有什么办法来找出哪个控件呈现它,所以我可以禁用该死的东西?这不仅仅是一个丑陋的问题 - 滚动它实际上与布局混乱!

在此先感谢!

相关的代码:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" ScrollViewer.VerticalScrollBarVisibility="Hidden" /> 
     <RowDefinition Height="*" MaxHeight="240" /> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <dxg:GridControl Name="StudySizeGrid" Grid.Column="0" Grid.Row="0" > 
     <dxg:GridControl.Resources> 
      <ControlTemplate x:Key="{dxgt:TableViewThemeKey ResourceKey=ControlTemplate}"> 
       <ScrollViewer x:Name="scr" 
      VerticalScrollBarVisibility="Disabled" 
      HorizontalScrollBarVisibility="Disabled" 
      Focusable="False" 
      dxg:GridControl.CurrentView="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
      Template="{DynamicResource {dxgt:TableViewThemeKey ResourceKey=ScrollViewerTemplate}}"> 
        <ScrollViewer.CanContentScroll>False</ScrollViewer.CanContentScroll> 
       </ScrollViewer> 
      </ControlTemplate> 
     </dxg:GridControl.Resources> 
... 
</dxg:GridControl> 

编辑澄清:这是WPF问题:-)

+0

你可以发布滚动条的SS吗? – 2011-05-10 10:39:48

+0

对不起,我的老板真的很偏执,我们正在为第三方开发,我不允许上传屏幕截图:/ 这很愚蠢,但我不能反对上级... – Fafnr 2011-05-10 13:54:44

你可以尝试检查VisualTree,我认为Snoop可能会有所帮助,它可能也有一些其他有用的功能。获得VisualTree虽然是一件小事,但你可以使用VisualTreeHelper编写一个递归方法,所以你可能不需要大枪。

例如

public static TreeViewItem GetVisualTree(this DependencyObject dpo) 
{ 
    TreeViewItem item = new TreeViewItem(); 
    item.Header = dpo.GetType().ToString().Split('.').Last(); 
    if (dpo is FrameworkElement && (dpo as FrameworkElement).Name != string.Empty) item.Header += " (" + (dpo as FrameworkElement).Name + ")"; 
    int cCount = VisualTreeHelper.GetChildrenCount(dpo); 
    for (int i = 0; i < cCount; i++) 
    { 
     item.Items.Add(VisualTreeHelper.GetChild(dpo, i).GetVisualTree()); 
    } 
    return item; 
} 

写道,前一段时间,这是非常粗略(不建议使它的扩展方法),在一个得到整个树,可以修改为只在节点的扩展取孩子。

+0

谢谢队友!我会尽快看看 - 我现在正在回家的路上,但我明天会看看。 – Fafnr 2011-05-10 13:52:14

+0

感谢Snoop技巧 - 它看起来会帮助我很多! :) – Fafnr 2011-05-11 10:31:20

您可以使用像谷歌Chrome浏览器的工具。

我会在Chrome中右键单击具有滚动条的区域并选择“检查元素”。 Chrome会用边框突出显示您正在查看的元素。然后,您可以在Chrome浏览器的检查器中导航html,直到使用滚动条突出显示该元素。

然后,您可以从那里找到原因。

+0

这是WPF .... – Fafnr 2011-05-10 13:55:17