【问题标题】:Detect which element scrollbars belong to检测滚动条属于哪些元素
【发布时间】:2011-05-10 09:11:21
【问题描述】:

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

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

我尝试在行的行定义上设置 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 问题 :-)

【问题讨论】:

  • 能发个滚动条的SS吗?
  • 对不起,因为我的老板真的很偏执,我们正在为第三者开发这个,我不允许上传截图:/这很愚蠢,但我不能真是违背上级的话……

标签: wpf grid devexpress gridcontrol


【解决方案1】:

您可以尝试查看 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;
}

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

【讨论】:

  • 谢谢伙计!我会尽快看看这个 - 我现在正在回家的路上,但我明天会去看看。
  • 感谢 Snoop 的提示 - 看起来对我有很大帮助! :)
【解决方案2】:

您可以使用类似谷歌浏览器的工具。

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

你可以从那里找到原因。

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多