2008-08-11 43 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.

這整個事情是一個控件模板內。我正在製作一個滑塊控件來教會自己的概念。

回答

2

上綁定的ElementName屬性是不支持Silverlight。

您會注意到,如果您進入代碼後面或者在類瀏覽器中檢查Binding對象,它沒有名爲ElementName的屬性。

+0

只是要注意:它是在Silverlight 4中(和3.5,我認爲) – MojoFilter 2010-06-25 12:40:45

0

的首先其外殼的事......

變化

Part_Track
PART_Track
這將解決您的綁定錯誤..

但我不認爲這是你正在嘗試做的。

您可以使用Grid而不是畫布,並且Thumb將自動調整大小。帆布並沒有真正的高度,因爲它並不真正關心其孩子的身高......

希望這有助於...

0

是在BTW模板邊境?

因爲沒有必要TemplateBinding如果邊界不位於模板(無論是控件模板或DataTemplate中)

1

我最常做的調試數據綁定,是增加一個轉換器,我可以設置在VS斷點.NET ..

所以綁定將是這樣的:

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

然後轉換器可以是一個空的執行中的IValueConverter,設置轉換方法中設置斷點,看高度是什麼設置...

不要忘了你的轉換器添加到您的資源......

或許值爲NaN?

1

嗯有可能是WPF之間連接的Silverlight在這一點上一個實質性的區別..

我似乎沒有什麼麻煩所以即使編譯和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

好吧,這裏的交易:

在Silverlight中,你不能從一個UI元素聲明將值綁定到另一個。做這件事的唯一方法就是使用C#代碼。

我有這個昨天的引用,但現在我想你只好把我的話:)

0

的Silverlight 3現在包括的ElementName綁定...

相關問題