¿Cómo obtener la altura deseada del elemento WPF UI con una altura actual de 0?

Mi objetivo final es animar el cambio de tamaño entre dos UserControls. La forma en que he intentado lograr esto ha producido un problema importante.

Comienzo con un DataTemplate que contiene texto básico e íconos, un Control de usuario 'editar' con una altura establecida en 0 y un botón de edición. La edición UserControl está en un GridRow con Height = "Auto", por lo que también comienza con una altura de 0. El botón tiene una doble animación activada por el clic del botón que anima la altura de UserControl de 0 a 300. Todo esto funciona muy bien Aquí hay un ejemplo de código simplificado.

<DataTemplate x:Key="UserTemplate" DataType="{x:Type dataTypes:User}">
...
<controls:UserView Grid.Row="1" Grid.ColumnSpan="5" x:Name="EditRow" 
    DataContext="{Binding}" Height="0" />
<controls:UserEditor Grid.Row="2" Grid.ColumnSpan="5" x:Name="EditRow" 
    DataContext="{Binding}" Height="0" />
<Button Grid.Row="0" Grid.Column="4" Name="Edit" Style="{StaticResource ButtonStyle}" 
    ToolTip="Edit user" Click="Button_Click">
    <Image Source="/SolutionName;component/Images/Edit.png" Stretch="None" />
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Name="EditRowHeightAnimation" 
    Storyboard.TargetName="EditRow" Storyboard.TargetProperty="Height" From="0" 
    To="300" Duration="00:00:0.5" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Button.Triggers>
</Button>
...
</DataTemplate>

El problema es que la edición UserControl no tiene 300 píxeles de altura y no sabré qué altura tendrá en el momento del diseño. Intenté lo siguiente, pero no funciona.

<DoubleAnimation Name="EditRowHeightAnimation" Storyboard.TargetName="EditRow"
    Storyboard.TargetProperty="Height" From="0" To="{Binding DesiredSize.Height, 
    ElementName=EditRow}" Duration="00:00:0.5" />

También he intentado llamar a Measure () y UpdateLayout () en la edición UserControl desde el código detrás. Comenté el disparador de clic de botón y la animación xaml y agregué uno del código detrás ... ahora esto funcionaba, pero siempre obtuve el mismo (incorrecto) DesiredSize. Es decir, la altura de UserControl se animaría, pero solo a la altura incorrecta. Aquí está el código del controlador de clic de botón.

private void Button_Click(object sender, RoutedEventArgs e)
{
    User currentUser = (User)CollectionViewSource.GetDefaultView(Users).CurrentItem;
    ListBoxItem listBoxItem = (ListBoxItem)
        (UsersListBox.ItemContainerGenerator.ContainerFromItem(currentUser));
    DataTemplate itemDataTemplate = FindResource("UserTemplate") as DataTemplate;
    ContentPresenter contentPresenter = listBoxItem.GetInternal<ContentPresenter>();
    if (itemDataTemplate != null && contentPresenter != null)
    {
        UserEditor userEditor = (UserEditor)itemDataTemplate.FindName("EditRow", 
            contentPresenter);
        userEditor.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
        userEditor.UpdateLayout();
        userEditor.BeginAnimation(HeightProperty, new DoubleAnimation(0, 
            userEditor.DesiredSize.Height, new Duration(new TimeSpan(0, 0, 1)), 
            FillBehavior.HoldEnd), HandoffBehavior.Compose);
    }
}

Así que mi pregunta es, ¿cómo puedo obtener el tamaño que tendría un UserControl si su contenedor no tuviera restricciones de tamaño, cuando su altura actual es 0?

También me alegraría saber si hay una mejor manera de lograr mi objetivo final. Muchas gracias de antemano

Respuestas a la pregunta(2)

Su respuesta a la pregunta