xaml中的值绑定语法是什么?

时间:2008-08-11 13:09:09

标签: .net wpf silverlight xaml binding

我已经全部了解了WPF中的绑定。不过,我在调试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中。我正在制作一个滑块控件来教我自己的概念。

8 个答案:

答案 0 :(得分:2)

Silverlight不支持Binding上的ElementName属性。

你会注意到,如果你进入后面的代码或检查类浏览器中的Binding对象,它没有名为ElementName的属性。

答案 1 :(得分:1)

好的,这是交易:

在silverlight中,您无法以声明方式将值从一个UI元素绑定到另一个UI元素。我在这里尝试做的唯一方法是使用C#代码。

昨天我有一个参考,但现在我想你只需要接受我的话:)

答案 2 :(得分:1)

我通常用来调试数据绑定,添加一个转换器,我可以在VS.NET中设置一个断点。

所以Binding会是这样的:

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

然后转换器可以是IValueConverter的空实现,在Convert方法中设置断点并查看高度设置为...

不要忘记将您的转换器添加到您的资源...

也许价值是NaN?

答案 3 :(得分: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

答案 4 :(得分:0)

首先是套管问题......

Part_Track
更改为
PART_Track
,这将修复您的绑定错误。

但我认为这不是你要做的事情。

您可以使用网格而不是画布,并且Thumb会自动调整大小。画布并没有真正的高度,因为它并不真正关心其孩子的身高......

希望这会有所帮助......

答案 5 :(得分:0)

模板中的边框是btw吗?

因为如果边框不在模板中(ControlTemplate或DataTemplate),则不需要TemplateBinding

答案 6 :(得分:0)

答案 7 :(得分:0)

Silverlight 3现在包含ElementName绑定...