以编程方式将按钮添加到UWP应用程序
假设我的应用程序有一个按钮添加了另一个按钮。 如果我按下它,另一个按钮应该出现在第一个按钮的旁边。 此外,新按钮应该成为“添加一个新按钮”按钮。以编程方式将按钮添加到UWP应用程序
我该怎么做?
我的方法是创建一个RelativePanel,因为在编辑器中,你可以说“把这个放在左边”。 但是,它找不到在C#代码中执行此操作的方法。
您可以按照ctron's comment并通过在代码中设置附加的属性值来完成。样品可以是这样的 - XAML:
<RelativePanel x:Name="myPanel" Margin="100">
<Button Content="StartBtn" Click="Button_Click"/>
</RelativePanel>
,并在后面的代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button newButton = new Button { Content = "CreatedBtn" };
newButton.Click += Button_Click;
RelativePanel.SetLeftOf(newButton,sender);
myPanel.Children.Add(newButton);
}
这将正常工作,但是如果您单击双次一个按钮,第二个新创建一个将重叠从第一次点击创建的那个。如果这不是一种理想的行为,那么您必须以其他方式来做,在这种情况下,您需要一个按钮列表。我用水平的ListView为:
<ListView x:Name="myList">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" ScrollViewer.HorizontalScrollMode="Enabled" ScrollViewer.VerticalScrollMode="Disabled"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" Click="ListButton_Click"/>
</DataTemplate>
</ListView.ItemTemplate>
<x:String>StartBtn</x:String>
</ListView>
private void ListButton_Click(object sender, RoutedEventArgs e)
{
int index = myList.Items.IndexOf((e.OriginalSource as FrameworkElement).DataContext);
myList.Items.Insert(index, $"Btn {myList.Items.Count}");
}
这需要一些更多的样式,而应该表现出的基本思想。
现在,我该如何指定新鲜生成的按钮的行为?我不希望他们添加其他按钮,他们应该做别的。 –
@DanielKrenn有两种方法可以做到这一点,使用相对选项非常简单,您可以在其中为每个创建的按钮创建新的事件处理程序。使用列表方法,您可以为您的项目定义类,将合适的委托放入其中或使用命令模式,然后在创建项目时定义它应该执行的操作。如果您没有成功,请自己尝试一下,在SO上发布另一个关于repro代码的问题,并说明您想实现的目标。 – Romasz
您可以使用RelativePanel类设置C#中的对齐方式,例如RelativePanel.SetLeftOf(buttonA,buttonB) – ctron