UWP动态添加TextBlock-s是堆叠的

时间:2017-10-29 15:19:15

标签: c# uwp

项目构建目标:Windows 10 Fall Creators Update (introduced v10.0.16299.0)

我正在动态添加TextBlock-s:

    TextBlock headName = new TextBlock();
    headName.Text = h3.OuterHtml;
    headName.IsTextSelectionEnabled = true;
    headName.Style = (Style)Application.Current.Resources["TitleTextBlockStyle"];

    GridView.Children.Add(headName);
//...
        foreach (HtmlNode p in ps)
        {
            TextBlock pTag = new TextBlock();
            pTag.Text = p.InnerText;
            pTag.IsTextSelectionEnabled = true;
            pTag.FontSize = 16;
            pTag.TextWrapping = TextWrapping.Wrap;

            GridView.Children.Add(pTag);
        }

进入xaml Grid

<Grid   x:Name="GridView"
        Loaded="GridView_Loaded"
        Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
</Grid>

但是文字相互堆叠。 Stacked TextBlock-s 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是<Grid>

的正常行为

注意:您的Grid不是GridView,如此处所述:https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.GridView

如果您使用StackPanel项目获取stacked ......那么......就是另一种形式。

例如:

<StackPanel x:Name="Stack"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
</StackPanel>

使用代码:

foreach (HtmlNode p in ps)
{
    //...
    Stack.Children.Add(pTag);
}

话虽如此,我建议你看一下绑定,MVVM和xaml。

您的问题可以通过更优雅的方式解决。

您也可以使用Templates,使用它们可以让您的UI完全基于XAML,而无需在代码中添加子代。

请参阅: https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/control-templates

有条件的信息:

Databind from XAML to code behind

https://social.msdn.microsoft.com/Forums/en-US/238bed43-e75a-472f-91c3-e16418b7948b/uwp-xaml-mvvm-binding-listbox-to-viewmodel-data?forum=wpdevelop