¿Cómo arrastrar un elemento de cuadro de lista en WP7?

Como los códigos a continuación, tengo un listboxitem. Quiero arrastrar el elemento del cuadro de lista horizontalmente hacia la derecha y desaparecer. pero al arrastrarlo, aparece este error,

transformar.X += e.CambioHorizontal;[Excepcion de referencia nula]

Verifico el reloj, descubrí que e.HorizontalChange tiene un valor de 65.0, ¿por qué muestra un error? y ¿Cómo logro mi objetivo?

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

y el código detrás del archivo es

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

preguntado el 03 de mayo de 12 a las 14:05

1 Respuestas

Su StackPanel no tiene un TranslateTransform especificado, por lo que la propiedad .RenderTransform es nula cuando se convierte en TranslateTransform.

La razón es que un elemento puede tener varios tipos diferentes de transformadas (CompositeTransform, ScaleTransform, SkewTransform, TranslateTransform, RotateTransform etc.). Por defecto un elemento no tiene RenderTransform en absoluto.

Si usa Blend para editar XAML a CompositeTransform es el tipo más común que crea (ya que abarca muchos tipos diferentes de transformaciones en un objeto).

Agregar un valor predeterminado TranslateTransform a la declaración del StackPanel y debería funcionar.

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

Como nota al margen: siempre debe probar el resultado de las operaciones "como", ya que pueden ser nulas.

contestado el 03 de mayo de 12 a las 14:05

¡Funciona a las mil maravillas! Muchas gracias por la solución y la explicación. - alberto gao

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.