2008-08-11 6 views
2

私はすべてWPFでのバインディングについて学んでいます。私はxamlの解析エラーをデバッグするのに多くの問題があります。誰かがこの小さな作品に間違っていることを教えてもらえますか? :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> 

これは壊れたデータバインディングです。これを実行しようとすると、ThumbKnob.Heightの例外はInvalidAttributeValueになります。私は何か根本的なものが欠けているに違いないと知っスタッカーに私を記入し、私の感謝は無限になります。


ElementNameを変更しても効果がありませんでした。私には何か他のものが必要です。

私はこれをSilverlightでテストしています。私は、Internet Explorerの外に取得しています正確なメッセージは次のとおりです。

XamlParseException: Invalid attribute value for property Height.

この全体のことはするControlTemplateの内側にあります。私は自分自身に概念を教えるためにスライダーコントロールを作っています。

答えて

2

バインディングのElementNameのプロパティがSilverlightでサポートされていません。

クラスエクスプローラでBindingオブジェクトの背後にあるコードを調べたり、Bindingオブジェクトを調べたりすると、ElementNameという名前のプロパティはありません。

+0

...バインディングが含まれます。それSilverlight 4に入っています(そして3.5、私は思っています) – MojoFilter

0

ケーシングのすべての問題の最初の...あなたのバインディングエラーを修正します

PART_Track

変更

Part_Track
...

しかし、私は、これはあなたがやろうとしているものであるとは思いません。

キャンバスの代わりにグリッドを使用すると、Thumbが自動的にサイズされます。それは本当に、その子供の身長を気にしないためにキャンバスは本当に...、このことができます

希望...ところでテンプレートでボーダーが

0

ですが、高さを持っていませんか?

国境をテンプレート(のControlTemplateまたはDataTemplateのいずれか)に配置されていない場合TemplateBindingのための必要はありませんので

1

私は通常、デバッグデータバインディングに何、私はVSでブレークポイントを設定することができますコンバータを追加することですその後コンバータは、IValueConverterの空の実装も変換メソッドにブレークポイントを設定し、高さがされている内容を確認でき

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

:.NET ..

ので、バインディングはこのようなものになるだろうに設定...

おそらく、値がNaNである...あなたのリソースへのコンバータを追加することを忘れないでください?この時点でのSilverlightのアンWPFとの間に実質的な違いがあるかもしれない

1

うーん...

私はそうでも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> 

おそらく、SilverlightはThumbクラスのプロパティが少ないです...

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

1

[OK]を、ここで契約です:

Silverlightで、あなたが宣言別のUI要素から値をバインドすることはできません。私がここでやろうとしていたことをする唯一の方法は、C#コードにあります。

私は昨日、このための参照を持っていたが、今私はあなただけそれは私の言葉を取る必要がありますね:)

0

のSilverlight 3は今のElementNameちょうど注意することが

関連する問題