Domanda

Sto imparando tutto sull'associazione in WPF.Tuttavia, ho molti problemi nel debug degli errori di analisi nel mio xaml.Qualcuno di carino può dirmi cosa c'è che non va in questo piccolo pezzo?:

<Border Name="TrackBackground"
    Margin="0"
    CornerRadius="2"                     
    Grid.Row="1"
    Grid.Column="1"
    Background="BlanchedAlmond"
    BorderThickness="1"
    Height="{TemplateBinding Height}">

    <Canvas Name="PART_Track" Background="DarkSalmon" Grid.Row="1" Grid.Column="1">
        <Thumb Name="ThumbKnob" Height="{Binding ElementName=Part_Track, Path=Height, Mode=OneWay}" />
    </Canvas>
</Border>

È l'associazione dei dati che si rompe.Ottengo un InvalidAttributeValue eccezione per ThumbKnob.Height quando provo a eseguirlo.So che mi deve mancare qualcosa di fondamentale.Quindi informatemi, stacker, e la mia gratitudine sarà sconfinata.


La modifica di ElementName non ha aiutato.Ci deve essere qualcos'altro che non capisco.

Dovrei dire che lo sto testando in Silverlight.Il messaggio esatto che ottengo da Internet Explorer è:

XamlParseException: Invalid attribute value for property Height.

Tutta questa cosa è all'interno di un ControlTemplate.Sto creando un controllo a scorrimento solo per insegnarmi i concetti.

È stato utile?

Soluzione

La proprietà ElementName su un'associazione non è supportata in Silverlight.

Noterai che, se accedi al codice dietro o controlli l'oggetto Binding in Class Explorer, non ha una proprietà denominata ElementName.

Altri suggerimenti

Quello che di solito faccio per eseguire il debug delle associazioni dati è aggiungere un convertitore in cui posso impostare un punto di interruzione in VS.NET..

quindi il Binding sarebbe qualcosa del genere:

{Binding ElementName=PART_Track, Path=Height, Mode=OneWay, Converter={StaticResources DebugConverter}}

Quindi il convertitore può essere un'implementazione vuota di un IValueConverter, impostare un punto di interruzione nel metodo Convert e vedere su cosa è stata impostata l'altezza...

Non dimenticare di aggiungere il tuo convertitore alle tue Risorse...

Forse il valore è NaN?

Ok, ecco l'accordo:

In Silverlight non è possibile associare valori da un elemento dell'interfaccia utente a un altro in modo dichiarativo.L'unico modo per fare quello che stavo cercando di fare qui sarebbe nel codice C#.

Avevo un riferimento per questo ieri, ma ora immagino che dovrai credermi sulla parola :)

Hmm potrebbe esserci una differenza sostanziale tra WPF e Silverlight su questo punto..

Mi sembra di non avere problemi, quindi anche a compilare ed eseguire questo esempio in una finestra WPF:

<Slider Width="400" Height="20">
    <Slider.Template>
        <ControlTemplate>
            <Border Name="TrackBackground"
                Margin="0"
                CornerRadius="2"                     
                Grid.Row="1"
                Grid.Column="1"
                Background="BlanchedAlmond"
                BorderThickness="1">

                <Canvas x:Name="PART_Track" Background="DarkSalmon" Grid.Row="1" Grid.Column="1">
                    <Thumb Name="ThumbKnob" Height="{Binding ElementName=PART_Track, Path=Height, Mode=OneWay}" />
                </Canvas>
            </Border>
        </ControlTemplate>
    </Slider.Template>
</Slider>

Forse Silverlight ha meno proprietà nella classe Thumb...

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx

Prima di tutto è una questione di custodia...

Modifica

Part_Track
A
PART_Track
che risolverà l'errore di associazione..

Ma non penso che questo sia quello che stai cercando di fare..

Potresti utilizzare una griglia invece di una tela e la miniatura verrà ridimensionata automaticamente.La tela non ha realmente un'altezza, perché non gli interessa davvero l'altezza dei suoi figli...

Spero che questo ti aiuti...

Il bordo è in un modello tra l'altro?

Poiché non è necessario TemplateBinding se il bordo non si trova in un modello (ControlTemplate o DataTemplate)

Silverlight 3 ora include l'associazione ElementName...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top