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