2011-11-10 70 views
3

我已經看到幾篇文章討論如何刪除已在運行時添加的UserControl,但我的問題有點不同。我有由具有上,用於本身(用戶控件)從其父畫布除去右上角小「X」按鈕的圖像的用戶控件。還要注意的是UserControl是在運行時添加一個ListBoxItem時雙擊的。我有一個Click事件處理程序,用於右上角的按鈕,但此代碼根本沒有運行。我知道這一點,因爲我在這個代碼中有一個斷點,當我點擊這個按鈕時,這個斷點還沒有到達。在運行時使用UserControl中的按鈕刪除UserControl

所以,

  1. 爲什麼沒有刪除按鈕的單擊事件正在處理?
  2. 也許有實現這個更好的方法。請指教。

下面是用於添加它的代碼:

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

+2

哦,我的gawd,通過比較字符串來檢查類型,就好像檢查單獨的類型還不夠糟!請將這些檢查更改爲'e.OriginalSource.GetType()== typeof(Border)'或'e.OriginalSource是Border'(它應該允許子類) –

+0

謝謝,會這樣做。 – Bryan

回答

0

所以我在這裏嘗試了您的代碼,除了一些名稱更改,無法重現您的問題。根據我的個人經驗,您的問題必須是由於某種原因,點擊事件沒有正確訂閱。爲此,我會去到設計者對用戶的控制,消滅的按鈕,在設計師的事件文本框,使得VS或混合產生一個適當的訂閱所需的所有代碼當前事件雙擊。

我已經根據您的代碼here創建了一個樣本。隨意拉下來,看看是否可以找到任何不一致之處。

至於更好的實現方式,請查看老式的MVVM模式和MVVM Light Toolkit。有了這個,你可以有一箇中央的ViewModel類,它將處理你所有的按鈕命令和綁定,而不需要代碼。

相關問題