2008-08-11 26 views
2

Ich werde alles über Bindung in WPF gelernt. Ich habe eine Menge Probleme beim Debuggen der Parse-Fehler in meinem XAML. Kann mir bitte jemand sagen, was mit diesem kleinen Stück los ist? :Was ist die Wert-bindende Syntax in XAML?

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

Es ist die Datenbindung, die bricht. Ich bekomme eine InvalidAttributeValue Ausnahme für ThumbKnob.Height, wenn ich versuche, dies auszuführen. Ich weiß, ich muss etwas Grundlegendes vermissen. Also, füllen Sie mich aus, Stapler, und meine Dankbarkeit wird grenzenlos sein.


Das Ändern des ElementName hat nicht geholfen. Da muss ich noch was anderes bekommen.

Ich sollte erwähnen, dass ich dies in Silverlight testen. Die genaue Nachricht Ich bin aus Internet Explorer immer ist:

XamlParseException: Invalid attribute value for property Height.

Das Ganze in einem Control ist. Ich mache einen Schieberegler, nur um mir die Konzepte beizubringen.

Antwort

2

Die Elementname-Eigenschaft auf einer Bindung ist nicht in Silverlight unterstützt.

Sie werden bemerken, wenn Sie in den Code hinter oder untersuchen Sie das Binding-Objekt im Klassen-Explorer, hat es keine Eigenschaft mit dem Namen ElementName.

+0

Gerade beinhaltet: es ist in Silverlight 4. (Und 3,5, denke ich) – MojoFilter

0

allererst seine selbst Gehäuse ...

ändern

Part_Track
zu
PART_Track
die Ihre Bindung Fehler beheben ..

Aber ich glaube nicht, dass das ist, was Sie zu tun versuchen. .

Sie könnten ein Raster anstelle eines Canvas verwenden, und der Thumb wird automatisch skaliert. Canvas ist nicht wirklich eine Höhe haben, denn es ist wirklich nicht über die Höhe ihrer Kinder kümmern ...

Hope this helps ...

0

ist die Grenze in einer Vorlage btw?

Da gibt es keine Notwendigkeit für Template, wenn die Grenze nicht in einer Vorlage (entweder Control oder Datatemplate) befindet sich

1

Was ich in der Regel zu debuggen Databindings tun, ist es, einen Konverter hinzuzufügen, wo ich einen Haltepunkt in VS einstellen .NET ..

so die Bindung würde wie folgt sein:

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

Dann kann der Konverter eine leere Implementierung eines IValueConverter sein, einen Haltepunkt in der Methode konvertieren und sehen, was die Höhe zu sein, ist einstellen ...

Vergessen Sie nicht, Ihren Konverter Ihre Ressourcen hinzuzufügen ...

Vielleicht ist der Wert NaN?

1

Hmm könnte es einen wesentlichen Unterschied zwischen WPF en Silverlight in diesem Punkt sein ..

ich scheinen keine Probleme zu haben, was so auch kompilieren und diese Probe in einem WPF-Fenster ausgeführt wird:

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

Vielleicht hat Silverlight weniger Eigenschaften in der Klasse Thumb ...

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

1

Ok, hier ist der Deal:

in Silverlight, können Sie keine Werte von einem UI-Elemente binden deklarativ zu einem anderen. Die einzige Möglichkeit, das zu tun, was ich hier versuchen wollte, wäre der C# -Code.

hatte ich eine Referenz für diese gestern, aber jetzt denke ich, Sie müssen nur auf mein Wort nehmen :)

0

Silverlight 3 jetzt zu beachten Element Bindung ...