使用UserControl中的按钮删除在运行时添加的UserControl

时间:2011-11-10 00:29:46

标签: wpf user-controls

我已经看过几篇关于如何删除在运行时添加的UserControl的帖子,但我的问题有点不同。我有一个UserControl,它包含一个右上角有一个小“x”按钮的图像,用于从其父画布中删除自身(UserControl)。另外需要注意的是,当用户在ListboxItem上双击时,会在运行时添加UserControl。我有一个右上角按钮的Click事件处理程序,但此代码根本没有运行。我知道这是因为我在这段代码中有一个断点,当我点击按钮时没有到达。

所以,

  1. 为什么不处理删除按钮的click事件?
  2. 也许有更好的方法来实现这一点。请指教。
  3. 以下是用于添加它的代码:

        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>
    

    提前致谢,

    布赖恩

1 个答案:

答案 0 :(得分:0)

所以我在这里完全尝试了你的代码,除了一些名称更改,无法重现你的问题。根据我的个人经验,您的问题必须是由于某种原因,点击事件未正确订阅。为此,我将进入设计器进行用户控制,清除按钮的当前事件,然后双击设计器事件文本框,以便VS或Blend生成正确订阅所需的所有代码。

我已根据您的代码here创建了一个示例。请随意将其拉下来,看看是否可以找到任何不一致的地方。

至于更好的实现方法,请查看好的旧MVVM模式和MVVM Light Toolkit。有了这个,您可以拥有一个中央ViewModel类,它将处理所有按钮命令和绑定,而无需代码。