好吧,听起来好像我没有做任何研究,但我做了。我有这样的形式:窗体锚/码头
,我想通过动态地添加这是OK的标签和文本框使用它的玩家我想任何金额。不过我发现中间的空间非常乏味。如何根据我拥有的组件数来设置组件的排序方式。我记得使用Java,有一种方法来打包组件,但在C#中似乎没有这种东西。我研究了锚和码头,但我希望也许有一个更简单的方法?
如果不是,你如何建议我这样做?
好吧,听起来好像我没有做任何研究,但我做了。我有这样的形式:窗体锚/码头
,我想通过动态地添加这是OK的标签和文本框使用它的玩家我想任何金额。不过我发现中间的空间非常乏味。如何根据我拥有的组件数来设置组件的排序方式。我记得使用Java,有一种方法来打包组件,但在C#中似乎没有这种东西。我研究了锚和码头,但我希望也许有一个更简单的方法?
如果不是,你如何建议我这样做?
我会创建一个类来保存“PlayerNo”(Int32)和“PlayerName”(String)等属性。 我们称之为“PlayerInfo”类。
其次我会创建一个PlayerInfo的ObservableCollection并添加玩家的数量。 我们称之为玩家。我会为所有属性创建依赖属性,以便我可以在XAML中使用我的类,并使用INgify 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”多基于上一轮等等等等,我已经说明了它的玩家通过设定为“空”(这当然是没有必要的,只是举例)
<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,该TextBox具有从Text属性到项目的“PlayerName”属性的绑定。
这样,我会有小代码隐藏和小XAML。这是一个简单的解决方案。 而且我也会让玩家的所有细节都准备好使用。
您可以尝试使用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);
顺便说一句,我认为你的字体颜色应是白色的(或其他具有更好对比度的)。
什么样的形式? WPF? –
是的我正在使用WPF – Bernice
这真的是一个非常大的差异。如果您使用的是WPF,那么使用[tag:wpf]标签。 –