Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF高度和列表框处的滚动-不可能_Wpf_Listbox - Fatal编程技术网

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

WPF高度和列表框处的滚动-不可能,wpf,listbox,Wpf,Listbox,为了简单起见,我所要做的就是在它下面放置一个列表框和一个按钮。虽然看起来很简单,但事实并非如此。它不是,因为它在网格中 行的大小是星形的,listboxhaveverticalAligntop一直都非常有效。问题是我不能在下面添加按钮。如果网格有两行,一行是星高,另一行是自动的,则即使listbox内容很少,也会将按钮放在表单底部。当调整大小时,尝试将两行设置为“自动”不起作用,因为在列表框中看不到滚动条。。。。有什么解决办法吗 更新一些代码 <Grid> <Grid

为了简单起见,我所要做的就是在它下面放置一个
列表框和一个按钮。虽然看起来很简单,但事实并非如此。它不是,因为它在网格中

行的大小是星形的,
listbox
have
verticalAlign
top一直都非常有效。问题是我不能在下面添加按钮。如果网格有两行,一行是星高,另一行是自动的,则即使
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>

- 
Τηλέφωνο 
Προσθήκη Χρήστη

您可以尝试对这两个选项都使用“自动”,并在列表框上添加一个MaxHeight,但您仍然有机会将按钮从屏幕上按下。或者将两者都放在ScrollViewer中。或者您可以使用顶部的按钮吗?

我通常不使用网格行,而是使用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>

因此,您的问题是您在
列表框中有ScrollViewer.VerticalScrollbars=可见,如果您不需要滚动条,则会使其折叠,我建议在设计中不要更多地使用边距。如果仍有滚动条,请删除
列表框的高度,并使窗口变大。如果您没有合适的大小和对齐方式,这完全取决于窗口的大小。改进代码

<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>

- 
Τηλέφωνο 
Προσθήκη Χρήστη

这完全取决于列表框中有多少数据。我尝试过用20行填充listbox的代码,它根本不显示滚动条

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


它工作得很好…

即使底部有按钮,我也能活下来,但我不明白为什么这么难实现。如果您愿意为MaxHeight编写一个转换器,我相信您可以做到这一点。从hard MaxHeight开始,看看这是否是您想要的视觉效果。我尝试过,虽然它有效,但有一个问题。按钮被隐藏,然后列表框开始有滚动条。。。我将用一些代码更新我的问题。我想要滚动条。。我只希望listbox能够容纳其容器的所有高度。但我不希望它在默认情况下被拉伸。如果其高度超过可用空间,则应显示滚动条。。只有星号大小的行才有效。但是在星号大小的行中,添加一个列表并在其下方添加一个按钮并不容易。如果我将这两个列表放在堆栈面板中,它们将不起作用。。唯一的解决方案似乎是通过绑定使按钮具有列表框高度的上边距,但我不知道这是否可行。唯一的方法是,如果您有一个像dockpanel这样的容器,我已经更新了dockpanel具有宽度和高度的代码。将列表框包装在scrollviewer中,然后赋予滚动条可视性auto(自动),这样,如果大小更改并超出限制,它将拥有滚动条,直到它没有滚动条为止。ScrollViewer会帮你的。从我读到的问题来看,他不是一个固定大小的列表框。是的,但是我们必须设置限制,比如他不希望宽度被拉伸,希望高度被固定。如果我们不设置限制,它将覆盖整个窗口。@dotnebee查看我的答案。使用计算的最大高度。这样,它会生长,但不会长得太多。当你写“Candothat”时,你暗示它是正确的,并回答了问题,所以我评论道。