WPF控件之ImageButton

使用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));
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值