检测哪些元素滚动条属于

时间:2011-05-10 09:11:22

标签: wpf grid devexpress gridcontrol

我有一个相对复杂的布局。它包括: 具有一列和三行的网格。 在第一行(上面给我带来麻烦)我有一个开发人员快速组件 - 另一个GridControl。

我的问题是,虽然第一行的高度是自动,但即使有足够的内容空间,垂直滚动条也会显示。

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

同样,我将内部GridControl设置为不使用滚动条(使用一些Developer Express魔术 - 不仅仅是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问题: - )

2 个答案:

答案 0 :(得分:1)

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

e.g。

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;
}

在很久以前写过,它非常粗略(不建议将其作为扩展方法),将整个树放在一个,可以修改为仅在扩展节点时获取子节点

答案 1 :(得分:0)

您可以使用Google Chrome的工具。

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

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