Подтвердить что ты не робот

WPF Animation "Невозможно заморозить это дерево временного шкала раскадровки для использования по потокам"

В настоящее время у меня есть список, у которого есть выделенный элемент, привязанный к свойству в моей модели ViewModel. Всякий раз, когда выбранный элемент не является нулевым, я хочу выполнить анимацию. Тем не менее, я продолжаю получать следующую ошибку "Невозможно заморозить это дерево временного шкала раскадровки для использования по потокам" , а из исследования - понять, почему это происходит. Однако я не уверен, какой подход мне нужен, чтобы получить нужное мне поведение.

<Storyboard x:Key="ShowItemEdit">
    <DoubleAnimation
        Storyboard.TargetName="lstItemList"
        Storyboard.TargetProperty="ListBox.Width"
        To="{Binding ActualWidth, ElementName=UserControl}"
        Duration="0:0:0.40" />
    ...
</Storyboard>

<Style x:Key="ListStyle">
    <Style.Triggers>
        <DataTrigger Binding="{Binding SelectedItem, Converter={StaticResource IsNullConverter}}" Value="False">
            <DataTrigger.EnterActions>
            <BeginStoryboard Storyboard="{StaticResource ShowItemEdit}" />
        </DataTrigger.EnterActions>
        </DataTrigger>
     </Style.Triggers>
</Style>

<ListBox x:Name="lstItemList" Style={StaticResource ListStyle}" SelectedItem="{Binding SelectedItem}">
    ...
</ListBox>
4b9b3361

Ответ 1

Можете ли вы разместить свою раскадровку? Похоже, у вас есть какое-то привязка в определении раскадровки.


Хорошо, поэтому, как я подозревал, это потому, что вы используете Binding в своем Storyboard. Вы не можете этого сделать, потому что WPF пытается заморозить все ресурсы, используемые шаблоном для эффективности, и когда вы используете привязку на Freezable, в этом случае Storyboard он предотвращает возможность замораживания.

Ответ 2

Существует метод, который можно использовать для решения проблемы Freezable , которая позволяет использовать привязку для значения "Кому" вашей анимации (а не жесткого кодирования значения там), Это довольно просто, и я описал его здесь.

Ответ 3

Старый вопрос, но может быть полезен для других людей. Иногда создание раскадровки в кодировке может быть проще: fooobar.com/info/281703/...