2012-05-03 34 views
2

作爲下面的代碼,我有一個listboxitem。 我想將listboxitem水平拖到右側並消失。 但拖動它時,彈出此錯誤,如何拖動WP7中的listboxitem?

transform.X + = e.Horizo​​ntalChange; [NullReferenceException]

我檢查Watch,發現e.Horizo​​ntalChange的值爲65.0,爲什麼它顯示錯誤?和我如何實現我的目標?

<DataTemplate x:Key="TasksListDataTemplate"> 
    <StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5"> 
      <toolkit:GestureService.GestureListener> 
       <toolkit:GestureListener 
        DragDelta="taskitem_DragDelta" 
      </toolkit:GestureService.GestureListener> 
     <TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="{Binding Title}" FontSize="{StaticResource PhoneFontSizeLarge}" HorizontalAlignment="Left" Width="432" RenderTransformOrigin="0.5,0.5"> 
     </TextBlock> 
     <StackPanel x:Name="stackPanel1" Orientation="Horizontal" HorizontalAlignment="Left"> 
      <TextBlock x:Name="textBlock1" TextWrapping="Wrap" Text="due:" d:LayoutOverrides="Width" FontSize="{StaticResource PhoneFontSizeMedium}" RenderTransformOrigin="0.5,0.5"> 
      </TextBlock> 
      <TextBlock x:Name="textBlock2" TextWrapping="Wrap" Text="{Binding DueDate}" d:LayoutOverrides="Width" FontSize="{StaticResource PhoneFontSizeMedium}" RenderTransformOrigin="0.5,0.5"> 
      </TextBlock> 
     </StackPanel> 
    </StackPanel> 
</DataTemplate> 

和代碼隱藏文件是

private void taskitem_DragDelta(object sender, DragDeltaGestureEventArgs e) 
    { 
     TranslateTransform transform = (sender as StackPanel).RenderTransform as TranslateTransform; 
     transform.X += e.HorizontalChange; 
    } 

回答

1

一個TranslateTransform指定您的StackPanel沒有,所以轉換爲TranslateTransform當.RenderTransform屬性爲null。

的原因是,一個元件可以具有許多不同類型的變換(CompositeTransformScaleTransformSkewTransformTranslateTransformRotateTransform等)的。默認情況下,一個元素根本沒有RenderTransform

如果使用Blend編輯XAML,CompositeTransform是它創建的最常見類型(因爲它包含一個對象中的許多不同類型的變換)。

將默認TranslateTransform添加到StackPanel的聲明,它應該工作。

<StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5"> 
    <StackPanel.RenderTransform> 
     <TranslateTransform X="0" Y="0"/> 
    </StackPanel.RenderTransform> 

作爲一個方面說明:您要經常檢測「爲」操作的結果,因爲他們可以爲空。

+0

它就像一個魅力!非常感謝解決方案和解釋。 –