InvalidOperationException: Specified element is already
the logical child of another element. Disconnect it first.
Попытка погуглить эту ошибку позволила мне предположить, что используемые мной привязки нарушают правило, согласно которому дочерний элемент может иметь только одного родителя, визуально или логически. Я также думаю , что в свойствах-нарушителях я пытаюсь привязать содержимое кнопки к изображению.
Если на панели стека есть только одна кнопка, использующая эти привязки, она работает. Но больше одной кнопки нет.
Я действительно не понимаю, почему это нарушает правило с одним родителем, или не знаю, как это исправить. Может ли кто-нибудь развить мою привязку к тому, который работает?
Приветствия
Berryl
Базовая привязка в словаре ресурсов
<Style x:Key="BoundImageButtonStyle" TargetType="{x:Type Button}" >
<Setter Property="Content">
<Setter.Value>
<Image Source="{Binding SmallImage}" />
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="ToolTip" Value="{Binding ToolTipTitle}" />
</Style>
Связывание в виде
<StackPanel Orientation="Horizontal" Height="30" Grid.Row="1" HorizontalAlignment="Center">
<StackPanel.Resources >
<sys:Double x:Key="btnSize">24</sys:Double>
<Style x:Key="btnStyle" TargetType="Button" BasedOn="{StaticResource BoundImageButtonStyle}">
<Setter Property="Height" Value="{StaticResource btnSize}" />
<Setter Property="Width" Value="{StaticResource btnSize}" />
</Style>
</StackPanel.Resources>
<Button Style="{StaticResource btnStyle}" DataContext="{Binding AddItemControl}" />
<Button Style="{StaticResource btnStyle}" DataContext="{Binding EditItemControl}" />
<Button Style="{StaticResource btnStyle}" DataContext="{Binding DeleteItemControl}" />
</StackPanel>
Пример привязки источника в ViewModel
public ButtonData AddItemControl
{
get
{
return _addItemControl ??
(_addItemControl = new ButtonData
{
ToolTipTitle = _crudTextConverter.AddNew(this),
SmallImage =
"pack://application:,,,/Smack.Core.Presentation.Wpf;component/Images/simplicio_add.png",
Command = AddItemCommand,
});
}
}
private ButtonData _addItemControl;