2012-05-03 4 views
2

Как приведенные ниже коды, у меня есть listboxitem. Я хочу перетащить listboxitem горизонтально вправо и исчезнуть. , но при перетаскивании этой ошибки появляется эта ошибка,Как перетащить listboxitem в WP7?

transform.X + = e.HorizontalChange; [NullReferenceException]

Я проверяю Watch, обнаружил, что значение e.HorizontalChange имеет значение 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

Ваш StackPanel не имеет TranslateTransform указано, поэтому свойство .RenderTransform равно нулю, когда приведение к TranslateTransform.

Причина заключается в том, что элемент может иметь несколько различных типов преобразований (CompositeTransform, ScaleTransform, SkewTransform, TranslateTransform, RotateTransform и т.д.). По умолчанию элемент не имеет RenderTransform.

Если вы используете Blend для редактирования XAML, то это самый распространенный тип, который он создает (поскольку он включает в себя множество различных типов преобразований в одном объекте).

Добавить значение по умолчанию 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

Это работает как шарм! Большое спасибо за решение и объяснение. –