首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF列表框拉伸问题

WPF列表框拉伸问题
EN

Stack Overflow用户
提问于 2022-08-05 02:49:40
回答 1查看 42关注 0票数 0

我已经创建了一个UserControl,它应该显示一些文本,然后显示一个列表框供用户选择某个项目。

它应该延伸到它所放置的网格单元格的高度。如果有更多的项目可以安装在屏幕上,然后显示一个垂直滚动条。经过多次尝试和错误,我终于设法使它如预期的那样工作。但只有当行高是像素值时。如果我使用任何部分(我指的是星号),网格单元格的高度就不包含在内。因为我需要应用程序,匹配屏幕大小,我需要部分工作。

将100个项目放入列表框中,突然使整个网格的高度大约为11000 (我认为这是所有没有禁忌的东西)。意思是没有滚动条。见Screenshot

我的TextBox也有类似的问题,只是横向的。它只会激活当点击一个特定的像素,因为它是空的,宽度只有一个像素。我希望有人能帮我指出我哪里出了问题,因为我有不止一个问题,所以我怀疑问题就在我头上。

这是我的XAML代码。

代码语言:javascript
复制
<UserControl x:Class="PackingStation.UserControls.SearchItemListing"
             x:Name="SearchItemListingRoot"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:PackingStation.UserControls"
             mc:Ignorable="d"
             d:DesignHeight="1000" d:DesignWidth="1000">
    <Grid DataContext="{Binding ElementName=SearchItemListingRoot}"
          x:Name="TheGrid"
          VerticalAlignment="Stretch">
           <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="1*" />
                  <ColumnDefinition Width="*" />
                  <ColumnDefinition Width="1*" />
           </Grid.ColumnDefinitions>
           <Grid.RowDefinitions>
                  <RowDefinition Height=".1*" />
                  <RowDefinition Height=".1*" />

        <!-- If this value isnt a pixel value it will not vertically strech to available space -->
                  <RowDefinition Height="*" />
           </Grid.RowDefinitions>
           <StackPanel HorizontalAlignment="Center"
                       Margin="0,0,0,0"
                       x:Name="TheHeadLineField"
                       Grid.Row="0"
                       Grid.Column="1">
                 <Label Style="{StaticResource LabelStyleHeadline32}" 
                        Content="{Binding Title}"
                        HorizontalAlignment="Left"/>  
                 <Label Style="{StaticResource LabelStyleText}"
                        HorizontalAlignment="Left"
                        Content="{Binding SubTitle}"
                        FontSize="20"/>
            </StackPanel>
            
            <!-- Search Field -->
            <Border Style="{StaticResource Border6}"
                    x:Name="TheSearchField"
                    Grid.Row="1"
                    Grid.Column="1"
                    Background="{StaticResource ColorSummaryPanelBackground}"
                    BorderBrush="{StaticResource ColorSummaryPanelBorder}"
                    BorderThickness="1"
                    Margin="0,40,0,0">
                <StackPanel Orientation="Horizontal"
                            Height="78"
                            HorizontalAlignment="Stretch">
                    <Image Stretch="Uniform"
                           Height="24"
                           Source="pack://application:,,,/WpfUI;component/Icons/Search.png"
                           Margin="36,0,0,0"
                           VerticalAlignment="Center"/>
                    
                    <!-- Search Textbox -->
                    <!-- Similar issue with this textbox, only horizontally. With no content you have to hit a specific pixel to activate it -->
                    <TextBox Style="{StaticResource TextBoxSearchInlay}"
                             Name="TbxSearchTerm"
                             TextChanged="TextBoxBase_OnTextChanged"
                             HorizontalContentAlignment="Stretch"
                             HorizontalAlignment="Stretch"
                             Margin="20,0,0,0"/>
                </StackPanel>
            </Border>
            
            <!-- Search results listings -->
            <ListBox ItemsSource="{Binding Items}"
                     x:Name="TheListBox"
                     Grid.Row="2"
                     Grid.Column="1"
                     SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
                     ScrollViewer.VerticalScrollBarVisibility="Auto"
                     HorizontalContentAlignment="Stretch"
                     VerticalContentAlignment="Stretch">
                   <ListBox.ItemTemplate>
                          <DataTemplate>
                                 <StackPanel HorizontalAlignment="Stretch" Margin="0,-10,0,-10">
                                        <Label Style="{StaticResource LabelSearchItem}"
                                               Content="{Binding Name}"
                                               HorizontalContentAlignment="Stretch"
                                               HorizontalAlignment="Stretch"/>
                                 </StackPanel>
                          </DataTemplate>
                   </ListBox.ItemTemplate>
            </ListBox>
    </Grid>
</UserControl>
EN

回答 1

Stack Overflow用户

发布于 2022-08-05 06:55:46

当我把你的UserControl放在一个StackPanel中时,我可以重复你的问题。当它在Grid中时,ListBox显示它的垂直滚动条。所以,在UserControl中试试Grid

我认为this answer会很好地解释GridStackPanel的拉伸行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73244147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档