2012-04-18 9 views
3

У меня есть приложение, которое я разрабатываю, и его размер по умолчанию - 1440x900. Я хочу, чтобы пользователь мог прокручивать вверх и вниз, если размер приложения меньше.RadGridView в ScrollViewer растягивается с экрана

Я попробовал обернуть элемент управления ScrollView вокруг главного элемента управления сетью приложения и, похоже, работал. Тем не менее, приложение имеет много страниц, и всякий раз, когда я перехожу к тому, у которого есть элемент управления RadGridView, столбцы RadGridView расширяются с страницы.

Я знаю, что это вызвано элементом управления ScrollView, потому что это в основном позволяет RadGridView расти настолько, насколько он хочет.

Есть ли способ остановить элементы управления RadGridView без растягивания?

ответ

1

Элемент управления Telerik RadGridView позволяет виртуализацию строк и столбцов, где элемент управления будет перерабатывать элементы управления, используемые для каждой ячейки сетки. Это сокращает использование памяти сетью, а также улучшает работу с большими объемами данных. Когда виртуализация включена, а сетка недостаточно велика, чтобы показать все данные, которые она содержит, сетка будет предоставлять свои собственные полосы прокрутки.

Чтобы включить виртуализацию, элемент управления RadGridView должен иметь ограниченную ширину и высоту. Помещение RadGridView внутри ScrollViewer дает бесконечную ширину и высоту, что отключает виртуализацию. Мое предложение состоит в том, чтобы связать ширину и высоту сетки, используя свойства MaxWidth и MaxHeight, а затем выньте сетку из ScrollViewer, которую вы ее обернули. Виртуализация строк и столбцов включена с использованием свойств и EnableColumnVirtualization свойств RadGridView, но, похоже, я помню, что оба они по умолчанию - True.

Отказ от ответственности: Я не использовал WPF-версию элементов управления Telerik, а только версию Silverlight. Оба происходят из одной и той же базы кода, поэтому их поведение должно быть схожим.

0

По умолчанию элемент управления RadGridView автоматически помещается в полосу прокрутки для горизонтальной и вертикальной прокрутки его строк, если для отображения содержимого недостаточно места. Вы правы, что ScrollViewer просто позволяет RadGridView определить его собственный размер без ограничений, и поэтому он заполнит ширину, чтобы разместить все ее столбцы, а также высоту для размещения всех строк.

RadGridView должен быть ограничен контейнером, поэтому вы захотите поместить его в ячейку сетки (если только он не должен охватывать весь вид). Вы не должны иметь ширину или высоту, установленные в RadGridView, потому что вы хотите, чтобы они были установлены как «Авто» (по умолчанию), чтобы расти или уменьшаться соответствующим образом. Похоже, что-то еще может мешать этому, поэтому я предлагаю вам опубликовать какой-то код.

Вот мой RadGridView, и он заполняет контейнер и прокручивает, как вы хотите. Обратите внимание, что я переопределил определение строки, и я использую настраиваемый пользовательский контроль, который вообще не должен влиять на прокрутку.

<telerik:RadGridView ItemsSource="{Binding Shipments}" RowStyle="{StaticResource rowStyle}" 
          RowDetailsVisibilityMode="Collapsed" 
          RowIndicatorVisibility="Collapsed" 
          CanUserDeleteRows="False" 
          CanUserInsertRows="False" 
          CanUserSelect="False" telerik:StyleManager.Theme="Windows7" /> 

Вот мой заказной rowtemplate (в моем местном ResourceDictionary):

<ControlTemplate x:Key="MyCustomRowTemplate" TargetType="telerik:GridViewRow"> 
      <Border x:Name="rowsContainer" BorderBrush="#FFA0AFC3" BorderThickness="0,0,0,1" > 
       <Grid Width="Auto" HorizontalAlignment="Stretch"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <view:ActiveReleaseItemView DataContext="{Binding}" /> 
       </Grid> 
      </Border> 
</ControlTemplate> 
<Style x:Key="rowStyle" TargetType="telerik:GridViewRow"> 
    <Setter Property="Template" Value="{StaticResource MyCustomRowTemplate}" /> 
</Style>