通过画布内的触发事件更改主窗体控件

乌里尔·帕里恩蒂

我目前正在从事一个项目,该项目需要我使用画布才能在图片中的特定位置周围绘制矩形(以标记位置)

每个矩形(实际上是“矩形”,因为它也是我通过从Grid该类继承而创建的自定义类,并且包含一个矩形对象)包含有关图片内标记位置的属性和数据。我的主要形式包含控件,如TextBoxDropDownLists

现在,我要尝试的是每次单击“矩形”对象时,主窗体控件将填充有对象数据。我没有从canvas类访问这些控件的权限。

这段代码在服装画布类内部,用于将对象添加到画布中:

protected override void OnMouseLeftButtonDown( MouseButtonEventArgs e)
 {
   if(e.ClickCount==2)
    {
      testTi = new TiTest();
      base.OnMouseLeftButtonDown(e);
      startPoint = e.GetPosition(this);
      testTi.MouseLeftButtonDown += testTi_MouseLeftButtonDown;
      Canvas.SetLeft(testTi, e.GetPosition(this).X);
      Canvas.SetTop(testTi, e.GetPosition(this).X);
      this.Children.Add(testTi);
   }
}

通过单击放置在画布内的对象,我想获取信息。现在只想确保我可以通过一个简单的消息框获取正确的对象

void testTi_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  {
    MessageBox.Show(sender.GetType().ToString());         
  }

这是我的服装“矩形”课

class TiTest:Grid
{

    private Label tiNameLabel;
    private Rectangle tiRectangle;
    private String SomeText = string.Empty;
    private String version = "1.0";
    private String application = "CRM";
    private String CRID = "NNN";

    public String SomeText1
    {
        get { return SomeText; }
        set { SomeText = value; }
    }

    public Rectangle TiRectangle
    {
        get { return tiRectangle; }
        set { tiRectangle = value; }
    }
    public Label TiNameLabel
    {
        get { return tiNameLabel; }
        set { tiNameLabel = value; }
    }

    public TiTest()
    {
        this.SomeText = "Hello World!!";
        this.TiNameLabel = new Label
            {
                Content = "Test Item",
                VerticalAlignment = System.Windows.VerticalAlignment.Top,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Left
            };
        TiRectangle = new Rectangle
          {
              Stroke = Brushes.Red,
              StrokeDashArray = new DoubleCollection() { 3 },//Brushes.LightBlue,
              StrokeThickness = 2,
              Cursor = Cursors.Hand,
              Fill = new SolidColorBrush(Color.FromArgb(0, 0, 111, 0))
          };
        Background= Brushes.Aqua;
        Opacity = 0.5;
        this.Children.Add(this.tiNameLabel);
        this.Children.Add(this.tiRectangle);


    }

}

有什么方法可以从服装画布类或服装矩形类访问主窗体控件?

提前致谢

奥姆里·布蒂安(Omri Btian)

您可以将主窗口绑定到包含ViewModel矩形属性的单调。

视图模型

 public class MainWindowViewModel : INotifyPropertyChanged
{
    #region Singletone

    private static MainWindowViewModel _instance;

    private MainWindowViewModel()
    {

    }

    public static MainWindowViewModel Instance
    {
        get
        {
            if (_instance == null)
                _instance = new MainWindowViewModel();

            return _instance;
        }
    } 

    #endregion

    #region Properties

    private string _someInfo;
    public string SomeInfo
    {
        get 
        {
            return _someInfo; 
        }
        set
        {
            if (_someInfo != value)
            {
                _someInfo = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("SomeInfo"));
            }


        }
    }

    #endregion

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}

在主窗口XAML

<TextBox Text="{Binding SomeInfo}"/>

还将视图模型设置为您的主窗口数据上下文(在主窗口构造函数中,例如exmaple)

this.DataContext = MainWindowViewModel.Instance;

最后,从您处理矩形(testTi_MouseLeftButtonDown的click事件的地方,访问MainWindowViewModel实例并相应地设置其属性。

MainWindowViewModel.Instance.SomeInfo = myRectangle.SomeInfo;

这将触发PropertyChanged事件,这将更新主窗口上的控件。

如果您不熟悉MVVM(模型,视图和视图模型)模式,则可以在此处阅读有关它的信息。

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA:触发窗体控件中的事件

来自分类Dev

使用VBA在Access的子窗体控件中触发事件

来自分类Dev

为什么在窗体显示事件之前触发Windows窗体控件单击事件?

来自分类Dev

通过Windows窗体控件列表处理事件

来自分类Dev

使用主窗体c#中的按钮在用户控件中调用事件

来自分类Dev

如何从主窗体内添加的模板用户控件中检测事件

来自分类Dev

在主窗体上的用户控件中订阅事件时,发生NullReferenceException

来自分类Dev

通过编程方式与控件交互后,如何防止事件触发?

来自分类Dev

从代码触发表单控件上的(更改)事件

来自分类Dev

Excel VBA 哪个用户窗体控件触发了共享鼠标悬停类事件?

来自分类Dev

如何从子窗体触发父窗体事件?

来自分类Dev

VBA遍历主窗体上的控件,而忽略子窗体

来自分类Dev

VBA遍历主窗体上的控件,而忽略子窗体

来自分类Dev

将焦点放在更改回调内的另一个控件时,jQuery更改事件触发了两次

来自分类Dev

画布加载事件未触发

来自分类Dev

如何将过程从自定义单元分配到主窗体上的事件处理程序控件

来自分类Dev

VB.NET用户控件删除主窗体控件

来自分类Dev

自定义控件事件未在用户控件内触发

来自分类Dev

触发事件以动态创建控件

来自分类Dev

从非主线程绘制到主窗体画布

来自分类Dev

如何在父窗体中更改子窗体控件的属性

来自分类Dev

C# 从 UserControl 更改主窗体的 UI

来自分类Dev

手动更改值时,为什么在NumericUpDown控件上未触发ValueChanged事件?

来自分类Dev

为什么我不能使用C#WebBrowser控件触发选择更改事件?

来自分类Dev

触发更改事件以触发主干事件

来自分类Dev

用户控件使用与主窗体相同的TCP连接

来自分类Dev

如何从用户控件的主窗体中读取属性

来自分类Dev

如何在不触发Button单击事件的情况下单击Button内容内的ToggleSwitch控件

来自分类Dev

从触发器中修改子控件,还是通过更好的方法来更改其前景?

Related 相关文章

  1. 1

    VBA:触发窗体控件中的事件

  2. 2

    使用VBA在Access的子窗体控件中触发事件

  3. 3

    为什么在窗体显示事件之前触发Windows窗体控件单击事件?

  4. 4

    通过Windows窗体控件列表处理事件

  5. 5

    使用主窗体c#中的按钮在用户控件中调用事件

  6. 6

    如何从主窗体内添加的模板用户控件中检测事件

  7. 7

    在主窗体上的用户控件中订阅事件时,发生NullReferenceException

  8. 8

    通过编程方式与控件交互后,如何防止事件触发?

  9. 9

    从代码触发表单控件上的(更改)事件

  10. 10

    Excel VBA 哪个用户窗体控件触发了共享鼠标悬停类事件?

  11. 11

    如何从子窗体触发父窗体事件?

  12. 12

    VBA遍历主窗体上的控件,而忽略子窗体

  13. 13

    VBA遍历主窗体上的控件,而忽略子窗体

  14. 14

    将焦点放在更改回调内的另一个控件时,jQuery更改事件触发了两次

  15. 15

    画布加载事件未触发

  16. 16

    如何将过程从自定义单元分配到主窗体上的事件处理程序控件

  17. 17

    VB.NET用户控件删除主窗体控件

  18. 18

    自定义控件事件未在用户控件内触发

  19. 19

    触发事件以动态创建控件

  20. 20

    从非主线程绘制到主窗体画布

  21. 21

    如何在父窗体中更改子窗体控件的属性

  22. 22

    C# 从 UserControl 更改主窗体的 UI

  23. 23

    手动更改值时,为什么在NumericUpDown控件上未触发ValueChanged事件?

  24. 24

    为什么我不能使用C#WebBrowser控件触发选择更改事件?

  25. 25

    触发更改事件以触发主干事件

  26. 26

    用户控件使用与主窗体相同的TCP连接

  27. 27

    如何从用户控件的主窗体中读取属性

  28. 28

    如何在不触发Button单击事件的情况下单击Button内容内的ToggleSwitch控件

  29. 29

    从触发器中修改子控件,还是通过更好的方法来更改其前景?

热门标签

归档