Silverlight: не удается заставить ScrollViewer и WrapPanel работать вместе - PullRequest
2 голосов
/ 22 мая 2009

Я использую WrapPanel для форматирования текста. Во время выполнения я добавляю TextBlocks и StackPanels как Дети. Очевидно, мне нужна полоса прокрутки в зависимости от размера данных. В поисках в Интернете я нашел несколько ответов, которые предлагают разместить ScrollViewer вокруг WrapPanel. Это имеет смысл для меня, но я не могу заставить его работать. Вот мой код:

scrollView = new ScrollViewer();
scrollView.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
scrollView.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
scrollView.HorizontalAlignment = HorizontalAlignment.Stretch;
scrollView.VerticalAlignment = VerticalAlignment.Stretch;
scrollView.Margin = new Thickness(0);
scrollView.BorderThickness = new Thickness(0);  

textPanel = new WrapPanel();
textPanel.Width = Width;
scrollView.Content = textPanel;

Это не работает. Кажется, ScrollViewer растет вместе с WrapPanel. Если я установлю вертикальную полосу прокрутки на видимую, я вижу, что полоса прокрутки увеличивается с содержанием. Но ScrollViewer вырастает из содержащего окна, и поэтому полоса прокрутки не отображается.

Любой намек, что я могу делать не так?

ура, Ахим

1 Ответ

3 голосов
/ 22 мая 2009

Вам нужно что-то, чтобы противоречить размеру WrapPanel и ScrollViewer - вы можете установить ширину и высоту средства просмотра, а затем использовать привязку элемента к оболочке:

 <ScrollViewer x:Name="ScrollViewer1" 
Width="200" 
Height="200"  
ScrollViewer.VerticalScrollBarVisibility="Visible"
  ScrollViewer.HorizontalScrollBarVisibility="Visible" >
                <controls:WrapPanel 
                      Width="{Binding ElementName=ScrollViewer1, Path=Width}" 
                      Height="{Binding ElementName=ScrollViewer1, Path=Height}">

Надеюсь, это поможет.

Ian

...