我已经看过几篇关于如何删除在运行时添加的UserControl的帖子,但我的问题有点不同。我有一个UserControl,它包含一个右上角有一个小“x”按钮的图像,用于从其父画布中删除自身(UserControl)。另外需要注意的是,当用户在ListboxItem上双击时,会在运行时添加UserControl。我有一个右上角按钮的Click事件处理程序,但此代码根本没有运行。我知道这是因为我在这段代码中有一个断点,当我点击按钮时没有到达。
所以,
以下是用于添加它的代码:
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>
提前致谢,
布赖恩
答案 0 :(得分:0)
所以我在这里完全尝试了你的代码,除了一些名称更改,无法重现你的问题。根据我的个人经验,您的问题必须是由于某种原因,点击事件未正确订阅。为此,我将进入设计器进行用户控制,清除按钮的当前事件,然后双击设计器事件文本框,以便VS或Blend生成正确订阅所需的所有代码。
我已根据您的代码here创建了一个示例。请随意将其拉下来,看看是否可以找到任何不一致的地方。
至于更好的实现方法,请查看好的旧MVVM模式和MVVM Light Toolkit。有了这个,您可以拥有一个中央ViewModel类,它将处理所有按钮命令和绑定,而无需代码。