【问题标题】:Programmatically add buttons to a UWP app以编程方式将按钮添加到 UWP 应用
【发布时间】:2017-02-17 20:21:06
【问题描述】:

假设我的应用有一个添加另一个按钮的按钮。 如果我按下它,另一个按钮应该出现在第一个按钮旁边。 此外,新按钮应成为“添加新按钮”按钮。

我该怎么做?

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

【问题讨论】:

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

标签: c# windows xaml uwp uwp-xaml


【解决方案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}");
}

这需要更多样式,但应该显示基本思想。

【讨论】:

  • 现在,如何指定新生成的按钮的行为?我不希望他们添加其他按钮,他们应该做其他事情。
  • @DanielKrenn 有几种方法可以做到这一点,使用相对选项非常容易,您可以为每个创建的按钮创建新的事件处理程序。使用 list 方法,您可以为您的项目定义类,将合适的委托放在那里或使用命令模式,然后在项目创建时定义它应该做什么。自己尝试一下,如果没有成功,请在 SO 上发布另一个问题,并附上重现代码并描述您想要实现的目标。
  • 嗨!您介意提供我们可以在 ListView 项目中使用两个或更多按钮的示例吗?
  • @AcademyofProgrammer 你的意思是把两个按钮放在 StackPanel 的项目数据模板中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多