Domanda

Qualcuno sa se è possibile databind il ScaleX e ScaleY di un render trasformare in Silverlight 2 Beta 2?Associazione trasforma è possibile in WPF, Ma ricevo un errore durante l'impostazione della mia associazione in Silverlight tramite XAML.Forse è possibile farlo tramite il codice?

<Image Height="60" HorizontalAlignment="Right" 
       Margin="0,122,11,0" VerticalAlignment="Top" Width="60" 
       Source="Images/Fish128x128.png" Stretch="Fill" 
       RenderTransformOrigin="0.5,0.5" x:Name="fishImage">
    <Image.RenderTransform>
         <TransformGroup>
             <ScaleTransform ScaleX="1" ScaleY="1"/>
             <SkewTransform/>
             <RotateTransform/>
             <TranslateTransform/>
         </TransformGroup>
    </Image.RenderTransform>
</Image>

Voglio associare le proprietà ScaleX e ScaleY di ScaleTransform elemento.

Sto ricevendo un errore di runtime quando cerco di associare contro un doppio di proprietà sui miei dati di contesto:

Message="AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 1570 Position: 108]"

La mia associazione simile a questo:

<ScaleTransform ScaleX="{Binding Path=SelectedDive.Visibility}" 
                ScaleY="{Binding Path=SelectedDive.Visibility}"/>

Ho tripla verificato che il percorso di associazione è corretta, io sono l'associazione di una barra di scorrimento contro lo stesso valore e che funziona bene...

La visibilità è di tipo double, ed è un numero compreso tra 0.0 e 30,0.Ho un convertitore di valori che bilancia quel numero fino a 0.5 e 1 - voglio scala la dimensione del pesce, a seconda della limpidezza dell'acqua.Quindi non penso sia un problema con il tipo sono vincolanti nei confronti di...

È stato utile?

Soluzione

ScaleTransform non avere un contesto di dati in modo più probabile l'associazione è alla ricerca di SelectedDive.Visibilità off è di per sé e non trovarla.C'è molto in Silverlight xaml e il databinding che è diverso da WPF...

Comunque per risolvere questo si vuole impostare l'associazione in codice**, o manualmente ascoltare per l'evento PropertyChanged dei dati oggetto e impostare la Scala in codice dietro.

Avrei scelto la seconda soluzione, se si voleva fare un'animazione/storyboard per la modifica della scala.

** ho bisogno di controllare, ma non si può essere in grado di legarsi ad essa.come mi ricordo se RenderTransform non è parte di un'animazione che viene trasformato in una matrice di trasformazione e tutte le scommesse sono spenti.

Altri suggerimenti

È un errore di runtime o a tempo di compilazione, Jonas?Guardando il documentazione, ScaleX e ScaleY sono proprietà di dipendenza, così si dovrebbe essere in grado di scrivere

<ScaleTransform ScaleX="{Binding Foo}" ScaleY="{Binding Bar}" />

...dove Foo e Bar sono del tipo appropriato.

Edit:Naturalmente, WPF documentazione.Suppongo che sia possibile che hanno cambiato proprietà ScaleX e ScaleY per essere proprietà standard, piuttosto che le proprietà di dipendenza in Silverlight.Mi piacerebbe sapere di più sull'errore che si sta osservando.

Ah penso di aver capito il tuo problema.Si sta tentando di associare una proprietà di tipo di Visibilità (SelectedDive.La visibilità) di una proprietà di tipo Double (ScaleTransform.ScaleX).WPF/Silverlight non è possibile la conversione tra questi due tipi.

Cosa stai cercando di realizzare?Forse ti posso aiutare con il codice XAML.Che cosa è "SelectedDive" e che cosa si vuole che accada quando la sua Visibilità modifiche?

Scusate, era alla ricerca di una risposta conteggio a salire, quindi non ho capito che avevo modificato la questione con ulteriori informazioni.

OK, quindi la Visibilità è di tipo Double, in modo che l'associazione dovrebbe funzionare in proposito.

Come soluzione alternativa, potresti provare a legare il proprio ScaleX e ScaleY direttamente i valori per il controllo del cursore che SelectedDive.La visibilità è associato?Qualcosa di simile a:

<ScaleTransform ScaleX="{Binding ElementName=slider1,Path=Value}" ... />

Se funziona, allora si sarà almeno farti andare.

Edit:Ah, mi sono appena ricordato che ho letto una volta che Silverlight non supporta ElementName sintassi in associazioni, in modo che potrebbe non funzionare.

Sì forse embedded rendere trasforma non ereditare la proprietà DataContext dall'oggetto cui si riferiscono.Si può forzare il DataContext in loro?Per esempio, dare la trasformazione di un nome:

<ScaleTransform x:Name="myScaler" ... />

...e poi nel tuo codice sottostante:

myScaler.DataContext = fishImage.DataContext;

...in modo che il scaler sicuramente condivide la sua DataContext con l'Immagine.

Ok, è l'Immagine stessa di raccogliere il DataContext correttamente?

Prova ad aggiungere questo:

<Image Tooltip="{Binding SelectedDive.Visibility}" ... />

Se si compila e si esegue, il mouse sopra l'immagine e vedere se viene visualizzato il giusto valore.

Speravo di risolvere questo tramite XAML, ma scopre che Brian è stato suggerito il modo per andare.Ho usato il suggerimento di Matt per dare la scala di trasformare un nome, in modo che io possa accedere dal codice.Poi ho collegato il valore modificato evento del cursore, e aggiorna manualmente la proprietà ScaleX e ScaleY proprietà.Ho mantenuto il mio valore converter per convertire il campo di visibilità (0-30m) in scala (da 0,5 a 1).Il codice simile a questo:

    private ScaleConverter converter;

    public DiveLog()
    {           
        InitializeComponent();

        converter = new ScaleConverter();
        visibilitySlider.ValueChanged += new 
          RoutedPropertyChangedEventHandler<double>(visibilitySlider_ValueChanged);
    }        

    private void visibilitySlider_ValueChanged(object sender,   
                                        RoutedPropertyChangedEventArgs<double> e)
    {
        fishScale.ScaleX = (double)converter.Convert(e.NewValue, 
                                   typeof(double), null, CultureInfo.CurrentCulture);
        fishScale.ScaleY = fishScale.ScaleX;
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top