2011-01-16 3 views
1

Я создал настраиваемый элемент управления, который просто рисует сетку квадратов на экране. Для этого он переопределяет метод OnRender и рисует прямоугольники.WPF - пользовательский контроль ScrollViewer

Я добавил этот настраиваемый элемент управления в окно WPF. Однако, когда я изменяю размер окна, часть пользовательского элемента управления скрыта. То, что я хочу, это полоса прокрутки, но после добавления средства просмотра прокрутки она ничего не сделала.

Я читал где-то в другом месте, я должен использовать IScrollInfo, но это похоже на то, чтобы сделать что-то очень простое.

Если бы кто-нибудь мог мне помочь, было бы весьма полезно.

Большое спасибо,

Matt

ответ

2

A ScrollViewer может прокручивать любой произвольный контент, поэтому вам не нужно реализовывать IScrollInfo, если вы не хотите поддерживать логическую прокрутку, то есть по линиям, а не по пикселям.

Если ваш пользовательский контроль не реализует MeasureOverride, он не будет участвовать в фазе измерения макета, а ScrollViewer не будет знать, какой большой регион вы хотите прокрутить.

Вот XAML-Комплексы только пример прокрутки Grid с графиком фоном бумаги:

<DockPanel> 
    <ScrollViewer Height="200" Width="250" HorizontalScrollBarVisibility="Visible"> 
     <Grid Height="400" Width="400"> 
      <Grid.Background> 
       <DrawingBrush x:Name="GridBrush" 
        Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile"> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing Brush="#CCCCFF"> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0 10,1" /> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
          <GeometryDrawing Brush="#CCCCFF"> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0 1,10" /> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Grid.Background> 
     </Grid> 
    </ScrollViewer> 
</DockPanel> 
0

ScrollViewer будет использовать его ребенка DesiredSize в качестве определяющего для того, необходимо скроллинг. Изменен ли ваш пользовательский контроль Measure()? Возможно, потребуется дополнительная проводка кода для вашего пользовательского элемента управления.

+0

Привет Кент. Нет, я не переопределил этот метод, только тот, который я сказал (OnRender). Мой пользовательский контроль немного сложнее, чем объясняется, поэтому размещение кода будет немного запутанным. –

Смежные вопросы