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

时间:2020-03-05 18:38:57  来源:igfitidea点击:

我正在学习有关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:属性Height的无效属性值。

这整个东西都在ControlTemplate内部。我正在制作一个滑块控件只是为了教自己一些概念。

解决方案

回答

首先是包装问题...

改变

Part_Track

PART_Track

这将解决绑定错误。

但是我不认为这是我们要尝试做的。

我们可以使用网格而不是画布,并且Thumb会自动调整大小。画布并没有真正的高度,因为它并不真正在乎其子代的高度。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

希望这可以帮助...

回答

模板中的边框是btw吗?

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

回答

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

所以绑定将是这样的:

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

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

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

也许值是NaN?

回答

嗯,在这一点上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/zh-CN/library/system.windows.controls.primitives.thumb.aspx

回答

嗯嗯:)

看起来不像这样:

http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx

回答

Silverlight不支持Binding的ElementName属性。

我们会发现,如果进入后面的代码或者在类资源管理器中检查Binding对象,则该对象没有名为ElementName的属性。

回答

好的,这是交易:

在Silverlight中,我们不能以声明方式将值从一个UI元素绑定到另一个。要做我在这里尝试做的唯一方法是在Ccode中。

我昨天有一个参考,但是现在我想你只需要听我说就可以了:)

回答

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