【问题标题】:XAML ScrollViewer scroll bar hidden issue (Silverlight)XAML ScrollViewer 滚动条隐藏问题 (Silverlight)
【发布时间】:2009-10-30 13:40:23
【问题描述】:

我遇到了一个奇怪的问题,即滚动查看器中的内容会增大,然后滚动查看器显示的是水平滚动条。然而,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;
            }
        }
    }
}

【问题讨论】:

    标签: wpf silverlight xaml layout scrollviewer


    【解决方案1】:

    好吧,我不知道为什么上面的方法不起作用,但作为一种解决方法,我只是重新构建页面,使其行为相同。这行得通:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      相关资源
      最近更新 更多