如何动态地将TextBlocks添加到RelativePanel?

时间:2016-09-14 15:08:23

标签: c# xaml uwp uwp-xaml

我正在尝试将TextBlocks动态添加到RelativePanel,但我无法找到将它们添加到彼此之下的方法。我的目标是在彼此之下动态添加六个TextBlock并交替。

看起来应该是这样的:

+---------+
| left    |
|   right |
| left    |
|   right |
| left    |
|   right |
+---------+

我尝试了一个for循环,但这不起作用,因为它一直在同一个地方而不是在前一个地方添加它们。 .cs代码:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    for (int i = 0; i < 3; i++)
    {
        TextBlock left = new TextBlock()
        {
            Name = "left",
            Text = "left",
            Foreground = new SolidColorBrush(Colors.White)
        };
        TextBlock right = new TextBlock()
        {
            Name = "right",
            Text = "right",
            Foreground = new SolidColorBrush(Colors.White),
        };
        RelativePanel.SetBelow(left, right);
        RelativePanel.SetAlignRightWithPanel(left, true);
        relativePanel.Children.Add(left);
        relativePanel.Children.Add(right);
    }
}

.xaml代码:

<ScrollViewer>
    <RelativePanel x:Name="relativePanel">

    </RelativePanel>
</ScrollViewer>

如果无法做到这一点,还有其他方法可以实现吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

你是相对接近的 - 问题是,对于你的for循环的下一次迭代,你会忽略谁是&#34;离开&#34;和&#34;对&#34; TextBlock并且您无法在旧版本之下设置新版本。 这是一种满足您需求的方法:

public void AddTextBoxes(int count)
{
    bool left = true;
    TextBlock lastAdded = null;

    for (int i = 0; i < count; i++)
    {
        var currentTextBlock = new TextBlock()
        {
            Name = "textblock" + i.ToString(),
            Text = left ? "left" : "right",
            Foreground = new SolidColorBrush(Colors.White)
        };
        if (lastAdded != null)
        {
            RelativePanel.SetBelow(currentTextBlock, lastAdded);
        }
        if (!left)
        {
            RelativePanel.SetAlignRightWithPanel(currentTextBlock, true);
        }
        relativePanel.Children.Add(currentTextBlock);

        left = !left;
        lastAdded = currentTextBlock;
    }
}

基本上,您可以跟踪上次添加的文本框,以便将下一个文本框放在其下方,并跟踪下一个位置所需的位置 - 左侧或右侧。