假設我的應用程序有一個按鈕添加了另一個按鈕。 如果我按下它,另一個按鈕應該出現在第一個按鈕的旁邊。 此外,新按鈕應該成爲「添加一個新按鈕」按鈕。以編程方式將按鈕添加到UWP應用程序
我該怎麼做?
我的方法是創建一個RelativePanel,因爲在編輯器中,你可以說「把這個放在左邊」。 但是,它找不到在C#代碼中執行此操作的方法。
假設我的應用程序有一個按鈕添加了另一個按鈕。 如果我按下它,另一個按鈕應該出現在第一個按鈕的旁邊。 此外,新按鈕應該成爲「添加一個新按鈕」按鈕。以編程方式將按鈕添加到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