将可见元素添加到Silverlight 3中的自定义面板

时间:2009-11-03 18:56:21

标签: xaml silverlight-3.0 custom-controls custom-panel

据我了解,Panel并不意味着有任何可见的“chrome”。 StackPanel,Grid和Canvas没有任何可见元素(网格线除外,他们说这些元素仅用于调试布局。)

在我的示例中,我将创建一个使用附加属性来布局其子控件的自定义面板。但是,我希望我的自定义面板在后台显示各种可见的“网格”。网格的外观(大小和位置)将取决于子元素的大小和位置。

有哪些方法可以实现这一目标?作为Silverlight和XAML的新手,我的第一个猜测是创建一个自定义控件,其中包含我的自定义面板用于布局。

我想我能够找出具体的代码,但我需要指出哪个构建块适合这种情况的正确方向。

2 个答案:

答案 0 :(得分:2)

你是正确的,自定义面板不能显示任何额外的铬;他们只能展示他们的孩子(网格是一个例外)。

要做你想做的事,你可以创建一个自定义面板,只需添加额外的儿童来显示铬。这不是一个好的设计(因为Panel的用户会在Children系列中看到这些额外的项目)。

最好的想法就是按照你所说的去做:创建一个公开Children属性的自定义控件。此控件可以在内部使用私有自定义Panel来布局这些元素(例如,TabControl使用特殊的TabPanel来布置选项卡)。在控件默认模板中,您可能希望将Panels的Children属性上的TemplateBinding用于Control的Children属性。

答案 1 :(得分:1)

Panel可以为其子女添加Adorners,阅读有关adorners的文章:http://msdn.microsoft.com/en-us/library/ms743737.aspx