Элементы управления WPF нельзя добавить к двум различным родительским элементам управления.Если вы хотите добавить копию элемента во время выполнения, вам нужно полностью создать новый объект, а не повторно использовать существующий.
При этом, поскольку ваши кнопки представляют параметр конфигурации, я бы порекомендовалвы используете что-то вроде ItemsControl
, которое связано с набором объектов данных, а Button
используется как ItemTemplate
.
Например, предположим, что у вас есть коллекция ObservableCollection<MySetting>
с именем Settings
.Затем вы могли бы написать следующий XAML:
<ItemsControl ItemsSource="{Binding Settings}">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="DockPanel.Dock" Value="Right" />
</Style>
</ItemsControl.ItemContainerStyle>
<!-- ItemTemplate -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding DataContext.LaunchLookup, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
Style="{StaticResource ButtonStyle}"
Margin="2,0,2,0"
Padding="3"
Visibility="{Binding Definition.IsLookupImageButton, Converter={StaticResource boolToVisibilityConverter}}"
IsEnabled="{Binding Locked, Converter={StaticResource invertedBooleanConverter}}">
<Image Source="search_button_rest.png"/>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Затем, чтобы добавить новые элементы, вы просто добавили бы элементы в ObservableCollection
Settings.Add(new MySetting());
Для других примеров используйте ItemsControl
этот пост я написал