我已經看到幾篇文章討論如何刪除已在運行時添加的UserControl,但我的問題有點不同。我有由具有上,用於本身(用戶控件)從其父畫布除去右上角小「X」按鈕的圖像的用戶控件。還要注意的是UserControl是在運行時添加一個ListBoxItem時雙擊的。我有一個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);
}
}
以下是該用戶控件的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>
謝謝前進,
Bryan
哦,我的gawd,通過比較字符串來檢查類型,就好像檢查單獨的類型還不夠糟!請將這些檢查更改爲'e.OriginalSource.GetType()== typeof(Border)'或'e.OriginalSource是Border'(它應該允許子類) –
謝謝,會這樣做。 – Bryan