0

好吧,这听起来好像我没有做任何研究,但我做了。我有这个表格:

在此处输入图像描述

我想通过动态添加标签和文本框将它用于我想要的任何数量的玩家,这没问题。但是我发现中间的空间非常乏味。如何根据我拥有的组件数量将组件设置为打包。我记得使用 Java,有一种方法可以打包组件,但 C# 中似乎没有这样的东西。我研究了锚和码头,但我希望也许有更简单的方法?

如果没有,你建议我怎么做?

4

2 回答 2

0

您可以尝试使用UniformGrid(默认情况下可能不包含在您的 Visual Studio 工具箱中,但您可以手动添加它)。例如,您的 XAML 代码可能是这样的:

<UniformGrid HorizontalAlignment="Center" Name="uniformGrid1" VerticalAlignment="Stretch" Width="200" Columns="1" />

UniformGrid添加控件的代码是:

TextBox tb = new TextBox();
tb.Width = 100;
tb.Height = 26;
Label lbl = new Label();
lbl.Content = "Player:";
Canvas canvas = new Canvas();
Canvas.SetLeft(lbl, 10);
Canvas.SetTop(lbl, 5);
Canvas.SetLeft(tb, 60);
Canvas.SetTop(tb, 5);
canvas.Children.Add(lbl);
canvas.Children.Add(tb);
uniformGrid1.Children.Add(canvas);

顺便说一句,我认为你的字体颜色应该是白色的(或者其他对比度更好的)。

于 2012-12-29T02:11:17.450 回答
0

我将创建一个包含“PlayerNo”(Int32)和“PlayerName”(String)等属性的类。我们称这个类为“PlayerInfo”。

其次,我将创建一个 PlayerInfo 的 ObservableCollection 并在那里添加玩家数量。我们称它为玩家。我将为所有属性创建依赖属性,以便我可以在 XAML 中使用我的类,并 inegrit INotifyPropertyChanged 以便 UI 自动更新。

this.Players = new ObservableCollection<PlayerInfo>();
this.Players.Add(new PlayerInfo() { PlayerNo=0, PlayerName=null });
this.Players.Add(new PlayerInfo() { PlayerNo=1, PlayerName=null });
this.Players.Add(new PlayerInfo() { PlayerNo=2, PlayerName=null });

然后,我将在 XAML 中创建一个 ItemsPresenter 控件,该控件具有从 ItemsSource 到模型类中 Players 属性的绑定。您甚至可以根据上一轮的玩家等填写“PlayerName”等。我通过将其设置为“null”来说明它(这当然不是必需的,只是说明性的)

<ItemsControl ItemsSource="{Binding Path=Players, Mode=OneWay}">
  <ItemsControl.ItemsPanel>
    <StackPanel Orientation="Vertical" />
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
        <TextBlock Text="Player" />
        <TextBlock Text="{Binding Path=PlayerNo, Mode=OneWay}" Margin="10,0,20,0" />
        <TextBox Text="{Binding Path=PlayerName, Mode=TwoWay}" Width="200" />
      </StackPanel>
    </DataTemplate>
  <ItemsControl.ItemTemplate>
</ItemsControl>

对于 ItemsPresenter 类,我将创建一个 ItemTemplate,其中包含一个显示“Player”后跟“PlayerId”编号的 TextBlock。我会使用一个 TextBox,它具有从 Text 属性到项目的“PlayerName”属性的绑定。

这样,我将几乎没有代码隐藏和 XAML。这是一个简单的解决方案。而且我还会准备好所有播放器的详细信息。

于 2012-12-29T10:19:52.913 回答