Wpf 如何将扩展器收割台高度从XAML传递到转换器

Wpf 如何将扩展器收割台高度从XAML传递到转换器,wpf,expander,Wpf,Expander,我在StackPanel中有两个扩展器,里面有很多内容。让我们将它们命名为A和B。当A打开而B关闭时,我希望A获得最大高度=窗口高度-标题高度。我希望使用转换器来实现这一点 我的问题是我无法将膨胀机B收割台的高度传递到转换器。尝试以下操作: <Grid x:Name="MyMainGrid"> <Grid.Resources> <local:MaxHeightConverter x:Key="MaxHeightConverter" />

我在StackPanel中有两个扩展器,里面有很多内容。让我们将它们命名为A和B。当A打开而B关闭时,我希望A获得最大高度=窗口高度-标题高度。我希望使用转换器来实现这一点

我的问题是我无法将膨胀机B收割台的高度传递到转换器。

尝试以下操作:

<Grid x:Name="MyMainGrid"> 
    <Grid.Resources>
        <local:MaxHeightConverter x:Key="MaxHeightConverter" />
    </Grid.Resources>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <StackPanel>
        <Expander x:Name="E1"
                  Header="E1">
            <Expander.MaxHeight>
                <MultiBinding Converter="{StaticResource MaxHeightConverter}">
                    <Binding ElementName="E2" Path="ActualHeight" />
                    <Binding ElementName="MyMainGrid" Path="ActualHeight" />
                </MultiBinding>
            </Expander.MaxHeight>
            <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                <TextBlock>
                    This has long content
                    <LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak />
                    End
                </TextBlock>
            </ScrollViewer>
        </Expander>
        <Expander x:Name="E2"
                  Header="E2">
            <Expander.MaxHeight>
                <MultiBinding Converter="{StaticResource MaxHeightConverter}">
                    <Binding ElementName="E1" Path="ActualHeight" />
                    <Binding ElementName="MyMainGrid" Path="ActualHeight" />
                </MultiBinding>
            </Expander.MaxHeight>
            <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                <TextBlock>
                    This has long content
                    <LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak />
                    End
                </TextBlock>
            </ScrollViewer>
        </Expander>
    </StackPanel>
</Grid>

你试过什么方法?已发送带有ElementName绑定的标头?扩展程序无法使用name属性。HeaderThat不是我的意思,您是如何尝试发送扩展程序的?
public class MaxHeightConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Length != 2 || !(values[0] is double) || !(values[1] is double)) throw new ArgumentException("Incorrect parameters passed to MaxHeightConverter");
        return (double) values[1] - (double) values[0];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}