将列表框maxHeight绑定到父实际

时间:2015-05-21 17:15:12

标签: c# wpf xaml

所以我在使lisbox height绑定工作时遇到了一些麻烦。我有一个包含listbox的用户控件,这个框是动态填充的,但似乎如果添加的项太多,它会超出父对象的边界并拒绝停止并使用scoll bar ......

   <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属性进行硬编码,一切都按预期工作,但是我将使用多种显示分辨率,这不是我可以使用的解决方案。任何人都可以推荐修复

1 个答案:

答案 0 :(得分:3)

您可以使用bind

Path=ActualHeight将其添加到元素中

为此,请勿忘记为包含Grid的{​​{1}}命名

尝试这样的事情:

Listbox

通过这样做,您可以将<Grid x:Name = "grdListBoxTest"> <ListBox x:Name="lstBoxTest" MaxHeight="{Binding ElementName=grdListBoxTest, Path=ActualHeight}"> <!-- Your Listbox Stuff Here --> </ListBox> </Grid> 的高度与其父Listbox相关联。这样,如果网格的大小发生变化,Grid的{​​{1}}会发生变化

我做了一个测试项目并且它有效。如果这不适合您,那么除了列表框MaxHeight

之外的其他地方您遇到了问题