2

我正在全面了解 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>

破坏的是数据绑定。InvalidAttributeValue当我尝试运行它时,我得到了ThumbKnob.Height 的异常。我知道我一定错过了一些基本的东西。所以填上我吧,堆垛机,我的感激之情将是无限的。


更改 ElementName 没有帮助。我必须有其他我没有得到的东西。

我应该提到我正在 Silverlight 中对此进行测试。我从 Internet Explorer 中得到的确切消息是:

XamlParseException: Invalid attribute value for property Height.

整个事情都在 ControlTemplate 中。我正在制作一个滑块控件,只是为了自学这些概念。

4

7 回答 7

2

Silverlight 不支持 Binding 的 ElementName 属性。

您会注意到,如果您进入后面的代码或在类资源管理器中检查 Binding 对象,它没有名为 ElementName 的属性。

于 2008-08-12T04:33:00.357 回答
1

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

所以绑定将是这样的:

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

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

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

也许价值是 NaN ?

于 2008-08-11T13:56:55.617 回答
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

于 2008-08-11T14:58:21.593 回答
1

好的,这是交易:

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

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

于 2008-08-12T12:00:26.977 回答
0

首先它的外壳问题...

改变

Part_Track
PART_Track
这将解决您的绑定错误..

但我不认为这是你想要做的..

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

希望这可以帮助...

于 2008-08-11T13:26:38.393 回答
0

顺便说一句,模板中有边框吗?

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

于 2008-08-11T13:35:27.550 回答
0

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

于 2010-02-17T22:44:50.493 回答