2009-11-03 14 views
19

Şu anda seçili öğesi ViewModel'imdeki bir özelliğe sahip olan bir liste kutusu var. Seçilen öğe null olduğunda, üzerinde bir animasyon gerçekleştirmek istiyorum. Ancak, şu hata iletisini almaya devam ediyorum "Bu Storyboard zaman çizelgesi ağacını, iş parçacıkları boyunca kullanım için donamıyorum" ve araştırma türünden bunun neden olduğunu anlayamıyorum. Ancak, istediğim davranışa ulaşmak için hangi yaklaşımı kullanmam gerektiğinden emin değilim.WPF Animasyon "Bu Storyboard zaman çizelgesi ağacını iş parçacıkları boyunca kullanmak için donamıyorum"

<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> 

cevap

25

Storyboard'unuzu gönderir misiniz? Storyboard tanımında bir çeşit bağlandığınız anlaşılıyor. Tahmin ettiğim gibi senin Storyboard bir Binding kullandığınız için


Ok bu yüzden, bu kadar. WPF, verimlilik için şablon tarafından desteklenen tüm kaynaklar için freeze tüm kaynakları dener ve Freezable bir Bağlama kullandığınızda, bu durumda Storyboard, donmasını engeller.

+0

Film şeridi kodunu ekledim. Genişliği kodlamak istemediğimden, 'To' özelliğini bağlarım. – jwarzech

+0

Bu senin problemin o zaman açıklayacağım. –

+0

Açıklama için teşekkürler! Datatrigger'i kontrole bağlamak zorunda kalmadan bu hikaye tahtasına nasıl ulaşabileceğime dair herhangi bir öneri (bağlayıcı ile)? – jwarzech

2

Eski soru, ancak diğer insanlar için yararlı olabilir. Bazen de film şeridini yaratarak kod arkada daha basit olabilir: Eğer bir "Kime" değeri arasında bağlayıcı kullanmanıza olanak sağlar Freezable sorunu etrafında almak için kullanabileceğiniz bir tekniktir vardır https://stackoverflow.com/a/10848781/779521

5

senin animasyon (orada bir değeri kodlamak yerine). Oldukça basit ve ben here özetledim.

İlgili konular