在Silverlight CustomControl中,如何根据包含Control的Grid布局该控件的元素?

时间:2010-12-30 22:01:16

标签: silverlight layout silverlight-4.0 custom-controls

假设Silverlight中的自定义控件具有三个名为Left,Middle和Right的TextBlock元素。我想将控件放在一个有三列的网格中,我希望这些元素的位置与使用Grid.Column =“x”语法使用Grid.Row内联定义它们的位置相同附加属性在自定义控件本身上设置。

或者,如果我完全偏离基础,那么获得类似结果的最佳方法是什么。

2 个答案:

答案 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);

    ...
}
相关问题