2009-10-30 7 views
1

J'ai ce problème étrange où le contenu dans une visionneuse de défilement augmente en taille, la visionneuse de défilement montre alors est la barre de défilement horizontale. Cependant, la grille dans laquelle se trouve le ScrollViewer ne semble pas suffisamment redimensionnée pour afficher la barre de défilement.Problème caché de barre de défilement ScrollViewer XAML (Silverlight)

J'ai isolé le problème dans cet exemple d'application, essentiellement un peu de xaml et du code derrière pour simuler l'augmentation de la taille du contenu.

Notez que la barre de défilement de droite ne s'affiche pas correctement lorsque vous cliquez sur le bouton de redimensionnement, j'ai ajouté un peu de remplissage pour montrer qu'il est là mais pas au bon endroit.

Si je retire la rangée supérieure, cela semble fonctionner.

Des idées et merci d'avance les gars et les filles?

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

Et voici le code derrière:

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

Répondre

0

Ok je ne sais pas pourquoi le précède ne fonctionne pas, mais comme une solution de contournement je restructurer seulement la page de sorte que son se comporte de la même manière. Cela fonctionne:

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

Questions connexes