将列表框maxHeight绑定到父节点



所以我有一些麻烦得到一个lisbox height的绑定工作。我有一个持有listbox的用户控件,这个框是动态填充的,但似乎如果添加了太多的项目,它会扩展到父对象的边界,并拒绝停止和使用滚动条……

   <UserControl x:Class="TransaltionModule.Views.NoteView"
         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" 
         mc:Ignorable="d">
<Grid>
    <ListBox ItemsSource="{Binding noteList}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="1*"/>
                        <ColumnDefinition Width="1*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="1*"/>
                        <RowDefinition Height="5*"/>
                    </Grid.RowDefinitions>
                    <StackPanel Orientation="Horizontal" Grid.Column="0">
                        <TextBlock Text="Type :" VerticalAlignment="Center" FontSize="14" Width="65"/>
                        <TextBox Text="{Binding noteType}" Width="auto" IsEnabled="False" VerticalAlignment="Center" FontSize="14"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right">
                        <TextBlock Text="Date :" VerticalAlignment="Center" FontSize="14" Width="65"/>
                        <TextBox Text="{Binding timeStamp}" Width="auto" IsEnabled="False" VerticalAlignment="Center" FontSize="14"/>
                    </StackPanel>
                    <TextBlock Grid.Row="1" Text="{Binding text}" Grid.ColumnSpan="2"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

如果我硬编码maxheight属性,一切都按预期工作,但是对于多个显示分辨率,我将反对这不是我可以使用的解决方案。谁能推荐一个修复

您可以使用Path=ActualHeight

将其bind设置为元素

要做到这一点,不要忘记命名包含ListboxGrid

试试这样写:

<Grid x:Name = "grdListBoxTest">
    <ListBox x:Name="lstBoxTest" 
             MaxHeight="{Binding ElementName=grdListBoxTest, Path=ActualHeight}">
        <!-- Your Listbox Stuff Here -->
    </ListBox>
</Grid>

通过这样做,您将Listbox的高度链接到它的父Grid。这样,如果网格的大小改变,ListboxMaxHeight也会改变。

最新更新