2009-10-30 4 views
1

스크롤 뷰어 내의 콘텐츠의 크기가 늘어나는이 이상한 문제가 발생하면 스크롤 뷰어에 가로 스크롤 막대가 표시됩니다. 그러나 ScrollViewer가 궁극적으로 내부에있는 표는 스크롤 막대를 표시 할 정도로 크기가 조정되지 않는 것처럼 보입니다.XAML ScrollViewer 스크롤 막대 숨겨진 문제 (Silverlight)

이 샘플 응용 프로그램에서 문제를 격리했습니다. 기본적으로 일부 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; 
      } 
     } 
    } 
} 

답변

0

이 좋아 나도 몰라,하지만 해결 방법으로 난 그냥 그것을 수 있도록 페이지를 재구성 똑같은 행동을한다. 즉 작동합니다

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

관련 문제