Высота WPF и прокрутка в списке - невозможно - PullRequest
3 голосов
/ 29 сентября 2011

Для простоты все, что я пытаюсь сделать, это поместить listbox и кнопку под ним.Хотя это кажется простым, это не так.Это не так, потому что он находится в GRID ...

Размер строки соответствует размеру звезды, а listbox с verticalAlign top прекрасно работает все время.Проблема в том, что я не могу добавить кнопку под ним.Наличие сетки с 2 рядами одной звездной высоты и другого авто поместило бы кнопку в нижней части формы, даже если содержимое listbox мало.Попытка установить обе строки автоматически не работает при изменении размера, так как на listbox не видна полоса прокрутки. Любой обходной путь для этого ??

Обновите некоторый код

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"  />
           <RowDefinition Height="Auto" />
         </Grid.RowDefinitions>
    <DockPanel >

       <ListBox DockPanel.Dock="Top" Name="lbStaff"  ItemsSource="{Binding}"  
            Grid.Row="0" VerticalAlignment="Top" BorderThickness="0" 
               Background="WhiteSmoke" Margin="15,10,20,30" Style="{DynamicResource 
               ListBoxUsers}" ScrollViewer.VerticalScrollBarVisibility="Visible">
       <ListBox.Resources>
         <Style  TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource 
            ListBoxTest1}"></Style>
       </ListBox.Resources>
         <ListBox.ItemTemplate>
             <DataTemplate >
                 <StackPanel Margin="5,4,5,4">
                     <TextBlock   HorizontalAlignment="Stretch"  FontSize="16"><Run 
                     Text="{Binding Name}"/> - <Run Text="{Binding   Mode=OneWay, 
                     Path=PositionString}"/></TextBlock>
                     <TextBlock >Τηλέφωνο <Run Text="{Binding Phone}"/>
                 </TextBlock>
                 </StackPanel>

             </DataTemplate>
           </ListBox.ItemTemplate>
  </ListBox>
     <Button DockPanel.Dock="Top" Grid.Row="0"   HorizontalAlignment="Right" 
       VerticalAlignment="Top"  Margin="0,10,7,0" Style="{DynamicResource 
        ButtonStyleNew1}">
       <Button.Content>
           <StackPanel Orientation="Horizontal">
               <Image Source="/WpfApplication1;component/Images/filenew1.png" 
               Stretch="None" VerticalAlignment="Center"></Image>
               <TextBlock Margin="5,0,0,0" FontSize="16">Προσθήκη Χρήστη</TextBlock>
          </StackPanel>
      </Button.Content>
     </Button>
  </DockPanel>                       

</Grid>

</Grid>

Ответы [ 4 ]

1 голос
/ 29 сентября 2011

Обычно я не использую строки сетки, но используя DockPanel, вы можете регулировать выравнивания, вкладывая каждый элемент.Но опять же, от дизайнера полностью зависит, как они спроектируют это, используя ряд сетки или любым другим способом.Что я получил от вопроса, следующий код должен помочь вам.но если вы разместите некоторый код, то мы сможем выяснить, где на самом деле проблема.

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <DockPanel>
        <DockPanel DockPanel.Dock="Top">
            <ListBox Height="50"/>
        </DockPanel>
        <DockPanel DockPanel.Dock="Bottom">
            <Button Height="20" DockPanel.Dock="Top"/>
            <Label/>
        </DockPanel>
    </DockPanel>
</Grid>
1 голос
/ 29 сентября 2011

Итак, ваша проблема здесь в том, что у вас есть ListBox, у вас есть ScrollViewer.VerticalScrollbars = Visible, который делает его свернутым, если вы не хотите использовать полосы прокрутки, и я бы посоветовал не использовать больше полей при проектировании.если у вас все еще есть полосы прокрутки, удалите высоту ListBox и увеличьте окно.Все зависит от размера окна, если у вас нет размера и правильного выравнивания.Уточнение вашего кода

<Window xmlns:my="clr-
 namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 
    x:Class="MyLightWpfApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"
    xmlns:local="clr-namespace:MyLightWpfApplication.ViewModel"
    DataContext="{Binding Main, Source={StaticResource Locator}}">

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Skins/MainSkin.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</Window.Resources>

<Grid>
    <DockPanel  >
        <DockPanel DockPanel.Dock="Top" Width="400" Height="200">
        <ScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <ListBox Name="lbStaff"  ItemsSource="{Binding AutoCompleteData}"  
          BorderThickness="0" 
           Background="WhiteSmoke" >

            <ListBox.ItemTemplate>
                <DataTemplate >
                    <StackPanel >
                        <TextBlock   HorizontalAlignment="Stretch"  FontSize="16"><Run 
                 Text="{Binding FirstName}"/> - <Run Text="{Binding   Mode=OneWay, 
                 Path=PositionString}"/></TextBlock>
                        <TextBlock >Τηλέφωνο <Run Text="{Binding LastName}"/>
                        </TextBlock>
                    </StackPanel>

                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        </ScrollViewer>
        </DockPanel>
        <DockPanel DockPanel.Dock="Bottom">
            <Button DockPanel.Dock="Top" Height="30" Grid.Row="0">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">

                        <TextBlock  FontSize="16">Προσθήκη Χρήστη</TextBlock>
                    </StackPanel>
                </Button.Content>
            </Button>
            <Label/>
        </DockPanel>
    </DockPanel>
</Grid>
</Window>

Все зависит от того, сколько данных у вас в ListBox.Я пробовал этот список, заполняющий список с 20 строками, на которых не отображаются полосы прокрутки

0 голосов
/ 01 октября 2011

Я решил эту проблему с помощью док-панели.Я закрепил кнопки внизу, а затем позволил списку заполнить оставшуюся область .. (lastchildfill = true) ...

Работает нормально ...

0 голосов
/ 29 сентября 2011

Вы можете попробовать авто для обоих и добавить MaxHeight в ListBox, но у вас все еще есть шанс нажать кнопку за пределами экрана. Или положить оба в ScrollViewer. Или ты можешь жить с кнопкой сверху?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...