如何将项目列表绑定到堆栈面板内的文本框

How to bind a list of items to textbox inside stackpanel

我是 Windows 应用程序开发的新手,正在尝试实现这样的显示:

Tag no:1 Tag no:2 Tag no:3 //屏幕左端

标记 no:4 标记 no:5 ...等等。

有些像这样:

我在 Windows 10 通用应用程序开发中这样做。

提前致谢。

我的Xaml代码:

 <StackPanel Orientation="Horizontal">
      <TextBlock Text="{x:Bind comment_tags}" />
 </StackPanel>

我的 C# 代码:

    public List<string> comments_tags = new List<string>();
    public MainPage()
    {
        this.InitializeComponent();
        for(int i =0; i < 20; i++)
        {
            comments_tags.Add("Tag no: " + i);
        }

     }

我尝试的新方法:

    public List<Border> comment_tags = new List<Border>();

        for (int i = 0; i < 20; i++)
        {
            Border b_temp = new Border();
            b_temp.CornerRadius = new CornerRadius(3);
            b_temp.Background = new SolidColorBrush(Colors.Aqua);
            TextBlock t = new TextBlock();
            t.Text = "Tag no: " + i;
            t.Foreground = new SolidColorBrush(Colors.Aqua)
            b_temp.Child = t;
            comments_tags.Add(b_temp);
        }

您不能将字符串列表直接绑定到 TextBox 控件。由于 TextBox 控件仅显示一个字符串,因此可以将列表的所有项目添加到 属性 中,这是一个字符串,并且 属性 应该用于将文本绑定到 TextBox。

您可以将 Text 绑定到 TextBox,如下所示:

XAML

 <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding TBProperty}" />
 </StackPanel>

C#

 public List<string> comments_tags = new List<string>();

        public string TBProperty
        {
            get;
            set;
        }

        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = this;

            for (int i = 0; i < 20; i++)
            {
                comments_tags.Add("Tag no: " + i);
            }

            foreach (string comment in comments_tags)
            {
                TBProperty += comment + " ";
            }

        }

你在这里处理标签的方法不正确,你不想要这里的文本框,你需要一个可以理解标签是什么以及如何处理它的控件。

看看 here and here 了解如何实现它。

或者一个最小的实现可以是

<ItemsControl ItemsSource="{Binding Items}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>

        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="PowderBlue" CornerRadius="5" BorderThickness="2" Height="45" Margin="5" >
                    <TextBlock Text="{Binding}" VerticalAlignment="Center" Margin="5"/>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

后面的代码是

 public MainWindow()
    {
        InitializeComponent();
        Items = new[] {"ABC", "DEF"};
        this.DataContext = this;
    }
    public string[] Items
    { get; set; }