如何将项目列表绑定到stackpanel

时间:2015-07-07 05:21:51

标签: c# wpf xaml data-binding

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

标签号码:1标签号码:2标签号码:3 //屏幕左端

标签号码:4标签号码:5 ......等等。

有些人喜欢这样:

enter image description here

我在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);
        }

2 个答案:

答案 0 :(得分:3)

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

查看herehere以了解如何实现此目标。

或最小的实施可能是

<ItemsControl ItemsSource="{x:Bind 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; }

答案 1 :(得分:1)

您无法将字符串列表直接绑定到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 + " ";
            }

        }