Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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
C# 控制WPF列表框高度,无需设置特定值,同时具有行';s高度设置为自动?_C#_Wpf_Listbox_Height - Fatal编程技术网

C# 控制WPF列表框高度,无需设置特定值,同时具有行';s高度设置为自动?

C# 控制WPF列表框高度,无需设置特定值,同时具有行';s高度设置为自动?,c#,wpf,listbox,height,C#,Wpf,Listbox,Height,我很好奇这是否可以做到。。。我有一个包含几行的网格。出于各种设计原因,我希望将行的高度保持为height=“Auto”。Listbox跨越网格中的三行。除非我将其高度设置为特定的值(height=“70”),否则在添加或删除项目时,它将动态调整其高度,同时也调整行的高度,因为行的高度设置为Auto。这是一种正常的行为,一切都正常运转——我只是想避开这种行为 有没有办法让这个列表框在它所占用的行的当前高度内垂直拉伸,而不直接控制行的高度?我知道row的height属性被设置为Auto会导致它根据其

我很好奇这是否可以做到。。。我有一个包含几行的网格。出于各种设计原因,我希望将行的高度保持为
height=“Auto”
。Listbox跨越网格中的三行。除非我将其高度设置为特定的值(
height=“70”
),否则在添加或删除项目时,它将动态调整其高度,同时也调整行的高度,因为行的高度设置为
Auto
。这是一种正常的行为,一切都正常运转——我只是想避开这种行为

有没有办法让这个列表框在它所占用的行的当前高度内垂直拉伸,而不直接控制行的高度?我知道row的height属性被设置为
Auto
会导致它根据其内容进行扩展和收缩,但我想知道是否可以阻止我的列表框拥有该权限,同时允许其他项执行正常操作

我可以在ListBox上获得相当精确的静态高度,以使整个界面看起来很好,但我希望它可以拉伸并占据指定行的空间,同时将行的高度保持为
Auto
,并受除该ListBox之外的任何其他内容的影响

如果做不到,有没有人对我的目标有什么建议

编辑:

基于谢里登出色的回答,我能够达到预期的结果。下面是使这一切发生的代码(另请参见Sheridan的代码)

公共类SumConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,
System.Globalization.culture(信息文化)
{
双和=0;
foreach(值中的var val)
{
总和+=(双)val;
}
回报金额;
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,
System.Globalization.culture(信息文化)
{
抛出新的NotImplementedException();//尚未实现此部分。。。
}
}

您应该能够将
ListBox.Height
属性数据绑定到占用相同空间的另一个控件的
实际高度

<ListBox Height="{Binding ActualHeight, ElementName=AnotherControlOfTheRightHeight}" />

你试过将垂直对齐设置为拉伸吗?@jugg1es我试过了。同样的行为。这是因为没有任何东西约束ListBox的高度,并且由于其height=“Auto”设置,行也随之拉伸。您知道该行中的哪个控件具有最大高度吗?你试过将listbox的高度绑定到此控件的高度吗?@Athari不,我没有。但在你和谢里登提到它之后,我发现它工作得很好。谢谢,太棒了!它就像一个符咒。我将把我的代码发布在我的原始帖子中,这样其他人就可以看到我做了什么。非常感谢。我还有一个问题。我如何解释这三个控件的边距高度呢?由于ListBox跨越了三行,因此会出现轻微的错位,因此它不考虑其他三个控件之间的间距。您当然可以这样做,尽管这会为您带来更多的工作。没有理由不让转换器变得更复杂。。。我有一个为类似复杂的UI布局添加了
double
值和
Size
维度。因此,您也可以绑定到controls
Margin
属性,您的
转换器
必须记住,输入可能是
double
Thickness
,在这种情况下,它必须从
Thickness
中提取
double
。谢谢,我会尝试一下。现在,我只选择了一条简单的路线。请参阅我编辑的帖子。欢迎并感谢您用决议更新您的问题。我觉得这提高了这个网站上帖子的质量。
<ListBox Height="{Binding ActualHeight, ElementName=AnotherControlOfTheRightHeight}" />
<ListBox>
    <ListBox.Height>
        <MultiBinding Converter="{StaticResource SumConverter}">
            <Binding Path="ActualHeight" ElementName="Control1" />
            <Binding Path="ActualHeight" ElementName="Control2" />
            <Binding Path="ActualHeight" ElementName="Control3" />
        </MultiBinding>
    </ListBox.Height>
</ListBox>