假设Silverlight中的自定义控件具有三个名为Left,Middle和Right的TextBlock元素。我想将控件放在一个有三列的网格中,我希望这些元素的位置与使用Grid.Column =“x”语法使用Grid.Row内联定义它们的位置相同附加属性在自定义控件本身上设置。
或者,如果我完全偏离基础,那么获得类似结果的最佳方法是什么。
答案 0 :(得分:1)
我认为你很可能“偏离基础”。自定义控件的目的是以独特的方式呈现数据。如果你想将布局分发给外部网格,那么我建议你没有调用自定义控件。
您似乎更有可能想要一个具有三个属性的类,您只需绑定三个TextBlocks。没有进一步的细节,很难给出更好的建议。
要回答你的实际问题,你不能。您需要将单个元素直接添加到Grid的Children集合中,以便网格负责其布局。这意味着这些元素不能在自定义控件中显示为子视觉元素。
答案 1 :(得分:0)
我的第一个想法是你不在基础上:)但你必须有充分的理由寻求解决方案。
在CustomControl中,您重写OnApplyTemplate。在此方法中,您可以找到三个TextBlock并使用SetValue设置Grid.Column值。
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
/// Find TextBlock named "Left"
var left = GetTemplateChild("Left") as TextBlock;
left.SetValue(Grid.ColumnProperty, 0);
...
}