質問

I’スクロールビューア内のコンテンツのサイズが大きくなり、スクロールビューアに水平スクロールバーが表示されるという奇妙な問題が発生しました。ただし、ScrollViewerが最終的に含まれるグリッドは、スクロールバーを表示するのに十分なサイズに変更されていないようです。

私はこのサンプルアプリで問題を切り分けました。基本的にはコンテンツサイズの増加をシミュレートするためのいくつかのxamlといくつかのコードです。

サイズ変更ボタンをクリックしたときに右スクロールバーが正しく表示されないことに注意してください。正しい場所ではなく、そこにあることを示すためにパディングを追加しました。

一番上の行を削除すると動作するようです。

アイデアや感謝の気持ちを事前に男性と女性に教えてください

<UserControl x:Class="SilverlightApplication7.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"
>
<Grid 
    ShowGridLines="True" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"
>
    <Grid.RowDefinitions>
        <RowDefinition x:Name="DealHeaderRow" Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="DealBarColumn" Width="Auto"></ColumnDefinition>
        <ColumnDefinition x:Name="MarketViewerColumn" Width="Auto"></ColumnDefinition>
        <ColumnDefinition x:Name="DealEditorColumn" Width="*" ></ColumnDefinition>
        <ColumnDefinition x:Name="InfoColumn" Width="Auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <ContentControl 
        x:Name="DealBarRegionContentControl"
        Grid.Row="0"
        Grid.Column="0" 
        Grid.RowSpan="2"
        VerticalContentAlignment="Stretch"
        HorizontalAlignment="Stretch"
        Margin="0">
        <TextBlock Text="DealBarRegion" Width="150" />
    </ContentControl>

    <ContentControl 
        Grid.Row="0"
        Grid.Column="1" 
        Grid.RowSpan="2"
        VerticalContentAlignment="Stretch"
        HorizontalAlignment="Stretch"
        HorizontalContentAlignment="Stretch">
        <Border Background="#FF9AF172">
            <TextBlock Text="MarketViewerRegion"  Width="150"  />
        </Border>
    </ContentControl>

    <ContentControl 
        Grid.Column="2" 
        Grid.ColumnSpan="2"
        Grid.Row="0"
        HorizontalAlignment="Stretch"
        HorizontalContentAlignment="Stretch" >
        <Border Background="#FFC1FC9F">
            <TextBlock Text="DealHeaderRegion"  />
        </Border>
    </ContentControl>

    <ContentControl 
        Grid.Column="2" 
        Grid.Row="1" 
        VerticalAlignment="Top"
        HorizontalContentAlignment="Stretch" 
        VerticalContentAlignment="Stretch">
        <Border Background="MistyRose" >
            <TextBlock Text="DealEditorRegion" />
        </Border>
    </ContentControl>

    <Grid
        Grid.Column="3" 
        Grid.Row="1" 
    >
        <ContentControl 
            x:Name="InfoRegionControl" 
            VerticalContentAlignment="Stretch"
            HorizontalAlignment="Stretch">
            <!-- without the padding here you can't see the scroll bar at all !! Its like the 
            scroll ScrollViewer isn't correctly calculating its width to include the scroll bar,
            or the grid isn't sizing at the points its visible??-->
            <Border Padding="0,0,9,0" MinWidth="200" x:Name="DealInfoControlPlaceHolder">
                <ScrollViewer  
                    HorizontalAlignment="Stretch" 
                    HorizontalContentAlignment="Stretch"
                    VerticalScrollBarVisibility="Auto" 
                    HorizontalScrollBarVisibility="Auto"  
                    >
                    <StackPanel x:Name="ScrollContentPlaceHolder">
                        <Button Click="Button_Click" Content="Rezize Column" x:Name="ResizeButton" />
                    </StackPanel>
                </ScrollViewer>
            </Border>
        </ContentControl>
    </Grid>
</Grid>

そして、これがコードビハインドです:

using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication7
{
    public partial class MainPage : UserControl
    {
        double _dealInfoControlPlaceHolderHeight = 0;
        double _dealInfoControlPlaceHolderWidth = 0;

        public MainPage()
        {
            InitializeComponent();

            Loaded += (o, e) =>
            {
                // cache the original width and height
                _dealInfoControlPlaceHolderHeight = DealInfoControlPlaceHolder.Height;
                _dealInfoControlPlaceHolderWidth = DealInfoControlPlaceHolder.Width;
            };
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (ScrollContentPlaceHolder.Height == 1200)
            {
                ScrollContentPlaceHolder.Height = _dealInfoControlPlaceHolderHeight;
                ScrollContentPlaceHolder.Width = _dealInfoControlPlaceHolderWidth;
            }
            else
            {
                ScrollContentPlaceHolder.Height = 1200;
                ScrollContentPlaceHolder.Width = 250;
            }
        }
    }
}
役に立ちましたか?

解決

OK動作します:

<UserControl x:Class="SilverlightApplication7.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"
>
<Grid 
    ShowGridLines="True" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"
>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="DealBarColumn" Width="Auto"></ColumnDefinition>
        <ColumnDefinition x:Name="MarketViewerColumn" Width="Auto"></ColumnDefinition>
        <ColumnDefinition x:Name="DealEditorColumn" Width="*" ></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <ContentControl 
        x:Name="DealBarRegionContentControl"
        Grid.Column="0" 
        VerticalContentAlignment="Stretch"
        HorizontalAlignment="Stretch"
        Margin="0">
        <TextBlock Text="DealBarRegion" Width="150" />
    </ContentControl>

    <ContentControl 
        Grid.Column="1" 
        VerticalContentAlignment="Stretch"
        HorizontalAlignment="Stretch"
        HorizontalContentAlignment="Stretch">
        <Border Background="#FF9AF172">
            <TextBlock Text="MarketViewerRegion"  Width="150"  />
        </Border>
    </ContentControl>

    <Grid
        Grid.Column="2" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <ContentControl 
            Grid.Row="0"
            HorizontalAlignment="Stretch"
            HorizontalContentAlignment="Stretch" >
            <Border Background="#FFC1FC9F">
                <TextBlock Text="DealHeaderRegion"  />
            </Border>
        </ContentControl>

        <Grid 
            Grid.Row="1"     
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <ContentControl 
                Grid.Column="0"
                VerticalAlignment="Top"
                HorizontalContentAlignment="Stretch" 
                VerticalContentAlignment="Stretch">
                <Border Background="MistyRose" >
                    <TextBlock Text="DealEditorRegion" />
                </Border>
            </ContentControl>
            <ContentControl 
                Grid.Column="1"
                x:Name="InfoRegionControl" 
                VerticalContentAlignment="Stretch"
                HorizontalAlignment="Right">
                <!-- without the padding here you can't see the scroll bar at all !! Its like the 
                scroll ScrollViewer isn't correctly calculating its width to include the scroll bar,
                or the grid isn't sizing at the points its visible??-->
                <Border Padding="0,0,9,0" MinWidth="200" x:Name="DealInfoControlPlaceHolder">
                    <ScrollViewer  
                        HorizontalAlignment="Stretch" 
                        HorizontalContentAlignment="Stretch"
                        VerticalScrollBarVisibility="Auto" 
                        HorizontalScrollBarVisibility="Auto"  
                        >
                        <StackPanel x:Name="ScrollContentPlaceHolder">
                            <Button Click="Button_Click" Content="Rezize Column" x:Name="ResizeButton" />
                        </StackPanel>
                    </ScrollViewer>
                </Border>
            </ContentControl>
        </Grid>
    </Grid>
</Grid>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top