Прежде всего, я прошу прощения за повторную активацию очень старой темы, но следующий код может проиллюстрировать ответ TerrorAustralis.
Свойство Heigth части 1 ScrollViewer зависит от ActualHeigth Аккордеона.Для более детальной настройки вы можете изменить значение ConverterParameter.
<UserControl ...
xmlns:local="clr-namespace:MyProject.namespace.converters"
xmlns:lTk="clr-namespace:System.Windows.Controls;assembly=DotNetProjects.Layout.Toolkit">
<lTk:Accordion HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<lTk:Accordion.Resources>
<local:RemoveMarginConverter x:Key="RemoveMarginConverter"/>
<Style TargetType="lTk:AccordionItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</lTk:Accordion.Resources>
<lTk:AccordionItem Header="Part 1">
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="White"
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type lTk:Accordion}},
Path=ActualHeight, Converter={StaticResource RemoveMarginConverter}, ConverterParameter=px50}">
<!-- Part 1 content -->
</ScrollViewer>
</lTk:AccordionItem>
<lTk:AccordionItem Header="Part 2">
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="White">
<!-- Part 2 content -->
</ScrollViewer>
</lTk:AccordionItem>
</lTk:Accordion>
</UserControl>
и код конвертера:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace MyProject.namespace.converters
{
public class RemoveMarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = System.Convert.ToInt32(value);
var margin = System.Convert.ToInt32(parameter.ToString().Replace("px", ""));
return val - margin;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}