WPF通过弹出窗体改变对象的颜色

水晶圣教士 2010-05-21 06:22:55
WPF通过弹出窗体改变对象的颜色

我需要实现一下功能:(类似与调色板功能)
如:窗体1.XAML中有一个canvas1,当我点击canvas1时,弹出窗体2,
窗体2中有能够选择颜色的控件(比如一个红色的按钮,一个蓝色按钮),选中一个后确定,关闭窗体2,这时窗体1中的canvas1变为我在窗体2中选中的颜色。

在窗体1中修改canvas1的颜色我能实现,
窗体1和窗体2之间使用委托传递字符串我也能实现,
可是传递颜色(不知道要传递什么)并且使其生效不知道怎么搞,请指教,谢谢^_^
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
水晶圣教士 2010-05-24
  • 打赏
  • 举报
回复
问题已经解决,使用您说的“直接把 窗体2 的已选择的颜色作为属性公开出来”能很方便的解决,前面的方法后面再进行尝试,谢谢^_^
websco 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 washingto 的回复:]
窗体1和窗体2之间使用委托传递字符串我也能实现
[/Quote]
能使用委托传递字符串,那就能使用委托传递任意类型嘛。
在.NET 3.0之前,需要从 EventArgs 派生出包含有想要传递的类型 的 XXXEventArgs ,比如楼主想要传递的是 Color 类型

public event EventHandler<ColorSelectedEventArgs> ColorSelected;
protected void OnColorSelected(object sender , ColorSelectedEventArgs arg )
{
if (this.ColorSelected != null)
{
this.ColorSelected(sender,arg);
}
}
public class ColorSelectedEventArgs : EventArgs
{
public System.Windows.Media.Color TheColor { get; set; }
public ColorSelectedEventArgs(System.Windows.Media.Color color)
{
this.TheColor = color;
}
}


在.NET 3.0之后,使用事件可以使用 Action<T> ,如

public event Action<System.Windows.Media.Color> ColorSelected1;
protected void OnColorSelected1(System.Windows.Media.Color color)
{
if (this.ColorSelected1 != null)
{
this.ColorSelected1(color);
}
}

虽然省去了创建 XXXXEventArgs 的麻烦,不过也脱离了微软之前所推荐的实现自定义事件的模型(就是要先创建一个XXXXEventArgs )。


另外,在两个窗口之间传递数据不一定要使用事件、委托的, 直接把 窗体2 的已选择的颜色作为属性公开出来也可以:

public System.Windows.Media.Color SelectedColor { get; private set; }

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧