런타임 중에 추가 된 UserControl을 제거하는 방법을 다루는 몇 가지 게시물을 보았습니다. 그러나 문제는 조금 다릅니다. UserControl은 부모 캔버스에서 자체 (UserControl)를 제거하는 데 사용되는 오른쪽 상단 모서리에 작은 "x"단추가있는 이미지로 구성됩니다. 또한 사용자가 ListBoxItem에서 doubleclick 할 때 런타임 중에 UserControl이 추가된다는 점도 유의하십시오. 오른쪽 상단 모서리 버튼에 대한 Click 이벤트 핸들러가 있지만이 코드는 전혀 실행되지 않습니다. 단추를 클릭 할 때 도달하지 않은이 코드에 중단 점이 있기 때문에 이것을 알 수 있습니다.UserControl 내의 단추를 사용하여 런타임에 추가 된 UserControl 제거
그래서,
- 왜 제거 버튼의 클릭 이벤트가 처리되지 않는?
- 아마 이것을 구현하는 더 좋은 방법이 있습니다. 제발 조언.
private void MyListBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (e.OriginalSource.ToString() == "System.Windows.Controls.Border" || e.OriginalSource.ToString() == "System.Windows.Controls.Image" || e.OriginalSource.ToString() == "System.Windows.Controls.TextBlock") { Expression.Blend.SampleData.MyCollection.Dataset lbi = ((sender as ListBox).SelectedItem as Expression.Blend.SampleData.MyCollection.Dataset); var new_usercontrol = new MyUserControl(); new_usercontrol.MyImageSourceProperty = lbi.Image; MyCanvas.Children.Add(new_usercontrol); Canvas.SetLeft(new_usercontrol, 100); Canvas.SetTop(new_usercontrol, 100); Canvas.SetZIndex(new_usercontrol, 100); } }
다음 UserControl을위한 CS 코드는 다음과 같습니다 : 여기
은 추가에 사용되는 코드의
public partial class ModuleElement : UserControl
{
public ImageSource MyProperty
{
get { return (ImageSource)this.image.Source; }
set { this.image.Source = value; }
}
public ModuleElement()
{
this.InitializeComponent();
}
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
((Canvas)this.Parent).Children.Remove(this);
}
}
XAML :
<Grid x:Name="LayoutRoot">
<Image x:Name="image" />
<Button x:Name="RemoveButton" Content="X" HorizontalAlignment="Right" Height="17.834" Margin="0" VerticalAlignment="Top" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Click="RemoveButton_Click">
</Button>
</Grid>
감사에서 advance,
브라이언
오 형제는 문자열을 비교하여 유형을 확인합니다. 마치 유형을 확인하는 것만으로는 충분하지 않은 것처럼 보입니다! 이 체크를'e.OriginalSource.GetType() == typeof (Border)'또는'e.OriginalSource is Border' (서브 클래스도 허용해야 함)로 변경하십시오. –
감사합니다. – Bryan