gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:13:01 30 4
gpt4 key购买 nike

我看过几篇文章介绍如何删除在运行时添加的 UserControl,但我的问题有点不同。我有一个 UserControl,它由一个图像组成,右上角有一个小“x”按钮,用于从其父 Canvas 中删除自身(UserControl)。还需要注意的是,当用户双击 ListboxItem 时,UserControl 是在运行时添加的。我有一个右上角按钮的 Click 事件处理程序,但这段代码根本没有运行。我知道这一点是因为我在这段代码中有一个断点,当我点击按钮时它没有到达。

所以,

  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>

提前致谢

布莱恩

最佳答案

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

我已经根据您的代码创建了一个示例 here .随意将其拉下并查看是否能发现任何不一致之处。

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

关于wpf - 使用 UserControl 中的按钮删除在运行时添加的 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073640/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com