xaml中的值绑定语法是什么?
我正在学习有关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绑定...