WPF高度和滚动列表框 - 不可能

时间:2011-09-29 00:44:41

标签: wpf listbox

为了简单起见,我要做的就是在它下面放置一个列表框和一个按钮。虽然看起来很简单但不是。它不是,因为它在GRID中......

行大小是星号,而verticalAlign top的列表框一直都很棒。问题是我可以在它下方添加一个按钮。如果列表框内容很少,那么网格有2行一星高,另一个自动将按钮放在表单底部。在调整大小时,尝试设置两行自动不起作用,因为列表框中没有可见的滚动条....对此有任何解决方法吗?

更新一些代码

 <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 个答案:

答案 0 :(得分:1)

我通常做的不是使用网格行,而是使用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 :(得分:1)

所以你的问题是你有ListBox你有ScrollViewer.VerticalScrollbars =可见,如果你不想要滚动条它会崩溃,我建议不要在设计中使用更多的边距。如果你仍然有滚动条删除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行没有显示滚动条

答案 2 :(得分:0)

您可以尝试自动两者并将MaxHeight放在ListBox上,但您仍然有可能将按钮从屏幕上移开。或者将它们放在ScrollViewer中。或者你可以忍受顶部的按钮吗?

答案 3 :(得分:0)

我使用dockpanel解决了这个问题。我将按钮停靠在底部然后让列表框填充剩余区域..(lastchildfill = true)...

工作正常......