2015-11-05 2 views
0

Как проверить, сколько строк в ListView входит в окно (Главное окно). Я предполагаю, что окно максимизировано, и только системные настройки определяют размер окна. ListView подключен к DockPanel с опцией FillLastChild.Настройка размера элемента управления WPF для соответствия размеру окна

Предоставляет ли WPF механизмы для автоматизации такой операции?

С уважением.

Вот мой WPF. Я хотел бы знать, сколько элементов подходит для «lstBox», чтобы контролировать пейджинг с помощью кнопок «Назад» и «Далее».

<Window x:Class="WpfApplication1.MainWindow" 
     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" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <DataTemplate x:Key="ListBoxTemplate"> 
      <Grid > 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding Path=Name}" TextWrapping="Wrap" /> 
       <TextBlock Grid.Column="1" Text="{Binding Path=Value}" TextWrapping="Wrap" /> 
      </Grid> 
     </DataTemplate> 
    </Window.Resources> 

    <DockPanel x:Name="MainPanel" LastChildFill="True"> 
    <Grid DockPanel.Dock="Bottom"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="40" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="15*"/> 
      <ColumnDefinition Width="75*"/> 
      <ColumnDefinition Width="15*"/> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="btnNext" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" Height="23" Content="Next" HorizontalAlignment="Right" Margin="0,6,0,0" Width="40" /> 
     <Button x:Name="btnBack" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="40" Height="23" Content="Back" Margin="0,6,0,0" /> 
    </Grid> 
    <ItemsControl x:Name="lstBox" ItemsSource="{Binding}" ItemTemplate="{DynamicResource ListBoxTemplate}" BorderBrush="#FF000000" 
        BorderThickness="1,1,1,1" VerticalAlignment="Stretch" /> 
    </DockPanel> 
</Window> 
+1

Вы пытаетесь динамически регулировать высоту и/или ширину элемента управления? Вы положили его внутри сетки и отрегулировали высоту до авто? – leigero

+1

Покажите нам свой XAML. Постройте пример, демонстрирующий вашу проблему с минимальным количеством строк. – Lorek

+0

XAML можно просмотреть выше – iljon

ответ

0

Упорядочить все в главной сетке. В определениях строк или столбцов сетки:

«Авто» делает ячейку сетки равным размеру присутствующего в ней элемента управления. «*» используется для обработки свободного места (слева после создания других столбцов или строк).

Для подробного урока: http://www.wpf-tutorial.com/panels/grid-units/

Вы наверняка сможете настроить элементы управления, как вы хотите после прочтения его

Вам не нужен этот шаблон ListBox только для пейджинга. WPF предлагает встроенную виртуализацию пользовательского интерфейса. Если вам нужна виртуализация данных (пейджинг), вы должны обратиться к этому: http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization

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