2017-02-17 113 views
0

假设我的应用程序有一个按钮添加了另一个按钮。 如果我按下它,另一个按钮应该出现在第一个按钮的旁边。 此外,新按钮应该成为“添加一个新按钮”按钮。以编程方式将按钮添加到UWP应用程序

我该怎么做?

我的方法是创建一个RelativePanel,因为在编辑器中,你可以说“把这个放在左边”。 但是,它找不到在C#代码中执行此操作的方法。

+1

您可以使用RelativePanel类设置C#中的对齐方式,例如RelativePanel.SetLeftOf(buttonA,buttonB) – ctron

回答

1

您可以按照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}"); 
} 

这需要一些更多的样式,而应该表现出的基本思想。

+0

现在,我该如何指定新鲜生成的按钮的行为?我不希望他们添加其他按钮,他们应该做别的。 –

+0

@DanielKrenn有两种方法可以做到这一点,使用相对选项非常简单,您可以在其中为每个创建的按钮创建新的事件处理程序。使用列表方法,您可以为您的项目定义类,将合适的委托放入其中或使用命令模式,然后在创建项目时定义它应该执行的操作。如果您没有成功,请自己尝试一下,在SO上发布另一个关于repro代码的问题,并说明您想实现的目标。 – Romasz

相关问题