Canvas Silverlight на Scrollviewer не срабатывает - PullRequest
1 голос
/ 27 июня 2009

Почему это так хорошо работает в wpf

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas x:Name="MyDesigner">
</Canvas>
</ScrollViewer>

Теперь, когда я делаю то же самое в silverlight и загружаю элемент управления, «который можно перетаскивать», полосы прокрутки не срабатывают, когда я перетаскиваю из поля зрения, ничего не происходит ... но в wpf они автоматически отображаются ...

Ответы [ 2 ]

7 голосов
/ 27 июня 2009

Как быструю проверку по сравнению с обычным 'gotcha' вы явно установили свойства высоты / ширины холста?

Если я использую xaml для тестирования и запускаю его:

 <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
     <Canvas x:Name="test" Background="Beige">
         <TextBlock Canvas.Left="2000" Canvas.Top="200" Text="test"/>
     </Canvas> 
 </ScrollViewer>

Не будет отображаться полоса прокрутки, даже если я явно создал контент на холсте 2000 слева, ширина холста не установлена, что означает, что у средства просмотра прокрутки нет диапазона для привязки, так сказать. Холст без ширины считается просто бесконечно широким из того, что я вижу. Хотя это не то же самое, что перетаскивание концепции размещения части контента вне текущего представления.

Как только вы добавите ширину, она определяет конечную область для прокрутки, и появляется полоса прокрутки.

1 голос
/ 24 июня 2010

Вот решение, которое я нашел. Холст может динамически расти, но вам нужно будет явно установить высоту на новое значение. Итак, если у вас есть 20 текстовых блоков с высотой 21, вам нужно установить высоту холста как: Canvas.Height = 22.0 * 100; для просмотра прокрутки, чтобы поднять новую высоту.

MainPage.xaml

<Canvas Canvas.Left="5" Canvas.Top="25"  >
    <ScrollViewer Width="300" Height="700"  x:Name="CanSummaryScroller">
        <Canvas x:Name="canSummaryCells"  >
        </Canvas>
    </ScrollViewer>  
</Canvas>

MainPage.xaml.cs

boxDevSumList представляет собой список текстовых полей

for (int i = 0; i < 100; i++)
{
    boxDevSumList.Add(new Cell());
    (boxDevSumList.ElementAt(i)).Width = 271;
    (boxDevSumList.ElementAt(i)).Height = 21;
    (boxDevSumList.ElementAt(i)).SetValue(FontFamilyProperty, new FontFamily("Calibri"));
    (boxDevSumList.ElementAt(i)).FontSize = 12;
    (boxDevSumList.ElementAt(i)).Text = "this is a test";
    if (i.Equals(1) || i.Equals(3) || i.Equals(5) || i.Equals(7) || i.Equals(9))
        (boxDevSumList.ElementAt(i)).Background = lgBrush;
    (boxDevSumList.ElementAt(i)).Opacity = .9;
    canSummaryCells.Children.Add(boxDevSumList.ElementAt(i));
    boxDevSumList.ElementAt(i).SetValue(Canvas.TopProperty, (double)(i * 21) + 45);
    boxDevSumList.ElementAt(i).SetValue(Canvas.LeftProperty, 4.0);
    canSummaryCells.Height = 22.0 * 100;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...