您的位置:首页 > 其它

WPF控件之ImageButton

2011-05-06 09:44 369 查看
使用wpf进行开发的时候,发现wpf居然没有提供ImageButton这样的控件,不过wpf提供了诸多实现途径,而且网上也有现成的控件可以利用。下面是一些链接

http://stackoverflow.com/questions/2491941/wpf-tristate-image-button/3676177#3676177

http://imagebuttonwpf.codeplex.com/

http://blogs.msdn.com/b/knom/archive/2007/10/31/wpf-control-development-3-ways-to-build-an-imagebutton.aspx



由于本人创建ImageButton的目的是满足需求、解决问题,而不是更好、更强,那么最简单的方法就是上述第三个链接中的第三个方法。这要感谢wpf提供了组合现有控件形成新控件的强大扩展能力了。关于这种实现方法的讲解可以参考链接中的文章。

我要补充的是,不知道是作者疏忽,还是本人没有正确使用。ImageButton居然没有Click的事件,那还是Button吗?(诸位也可以试试MouseLeftButton事件,看看是不是能够替代Click,本人比较懒:) )。那具体怎么做呢?那就要找路由事件帮忙了(路由事件,侬帮帮忙好伐?)。基于已有代码大概步骤如下:

注册并发布自定义控件的Click路由事件

public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent("Click",RoutingStrategy.Bubble,typeof(RoutedEventHandler),typeof(ImageButton));

public event RoutedEventHandler Click
{
add { AddHandler(ClickEvent, value); }
remove { RemoveHandler(ClickEvent, value); }
}



接收自定义控件中组合的控件(即Image、TextBlock、StackPanel)的Click路由事件

<Button Click="Button_Click">

<StackPanel Orientation="Horizontal" Margin="10">

<Image Source="{Binding ElementName=UC,
Path=Image}"
Width="{Binding ElementName=UC,
Path=ImageWidth}"
Height="{Binding ElementName=UC,
Path=ImageHeight}"/>
<TextBlock Text="{Binding
ElementName=UC, Path=Text}"

Margin="10,0,0,0"/>
</StackPanel>

</Button>

激发自定义控件的Click事件

private void Button_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(ClickEvent));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: