2017-02-17 112 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

相關問題