1

私は比較的複雑なレイアウトを持っています。1 列 3 行のグリッド。最初の行 (私に問題を与えている) には、開発者向けの Express コンポーネント (別の 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の問題です:-)

4

2 に答える 2

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

かなり前に書いた、それは非常に大ざっぱで(拡張メソッドにすることはお勧めしません)、ツリー全体を一度に取得し、ノードの展開時に子のみをフェッチするように変更できます。

于 2011-05-10T09:24:59.897 に答える
0

Google Chrome のツールのようなものを使用できます。

Chrome では、スクロール バーのある領域を右クリックし、[要素の検査] を選択します。Chrome は、見ている要素を境界線で強調表示します。その後、スクロールバーで要素が強調表示されるまで、Google Chrome のインスペクター内で html をナビゲートできます。

そこから原因を探ることができます。

于 2011-05-10T09:23:31.183 に答える