WP7 - 图片点击事件?

8

有没有办法给图像分配点击事件?我想为显示数据的列表框中的删除和搜索按钮分配事件。是否可以使用图像控件来实现这一点,还是我必须在BLEND中创建一个按钮样式?

        <ListBox x:Name="lbPills" ItemsSource="{Binding pillItemsCollection}" SelectionChanged="lbPills_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel x:Name="DataTemplateStackPanel" Orientation="Horizontal">
                        <TextBlock FontFamily="Segoe WP Semibold" FontWeight="Bold" FontSize="30" VerticalAlignment="Top" Margin="20,0">*</TextBlock>
                        <StackPanel>
                            <TextBlock x:Name="ItemText" Text="{Binding Name}" Margin="-2,-13,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        </StackPanel>

                        <Image Source="Images/delete.png" Margin="10,0"/>
                        <Image Source="Images/search.png" Margin="10,0"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
6个回答

13
据我所知,图像本身没有关于点击和手势事件的监听器(它们将必须通过手势附加)。一种方法是重新设置按钮的模板:

To my knowledge there are no listeners on the Image itself for click and gesture events (they will have to be attached via Gestures as previously mentioned). One way to approach this is to re-template the button:


        <Button>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="Images/delete.png" Margin="10,0"/>
                </ControlTemplate>
            </Button.Template>
        </Button>

在为按钮设置模板时,您将覆盖电话使用的默认模板(具有额外的填充、厚边框等)。使用此方法将允许您绑定到按钮点击事件。


1
只是想让你知道,我尝试了你的答案,用于另一个我正在使用的按钮上,我想在其中包含一张图片,效果非常好!谢谢! - webdad3

9

您可以使用手势监听器来检测轻击(点击)事件,这里有一份详细的操作指南。

WP7每日小技巧:Silverlight工具包:手势

另外,您也可以将您的图片放入一个按钮控件中,并在Blend中重新设置模板以达到您想要的外观效果。


有没有办法使用手势将ID或索引值添加到图像中,以便在单击按钮时可以确定集合中选择了哪个项目? - webdad3
所有手势都很好用!我正在使用SelectionChanged="lbPills_SelectionChanged"来确定哪个项目被点击了。感谢您的帮助! - webdad3
链接的教程不存在。 - Paresh Mayani

2
处理ManipulationCompleted事件(任何轻触,双击,滑动,抚摸或爱抚)以处理您的图像。因此:<Image Source="Images/delete.png" Margin="10,0"/> 变成 <Image x:Name="ImageDelete" ManipulationCompleted="ImageDelete_ManipulationCompleted" Source="Images/delete.png" Margin="10,0"/>。然后在ImageDelete_ManipulationCompleted处理程序中,跟踪从哪里来自sender,并执行您的操作。如果您只想跟踪滑动而不是轻触,请在ManipulationCompletedEventArgs上使用e.IsInertial进行if语句。

0

对我来说是这样的(将Padding=”-10”设置后,移除了按钮边框和按钮内部填充)

<Button x:Name="Channells" Click="Thumb_Click" Padding="-10" >
      <Image 
           VerticalAlignment="Center"
           Source="Assets/Images/thumb2.jpg"/>
</Button>

*.cs

 void Thumb_Click(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("Thumb Clicked");
    }

0

我使用MouseLeftButtonDown和MouseLeftButtonUp来实现。它可以替代在设备上点击或者触摸选项卡,就像在电脑上用鼠标单击事件一样。在我的应用程序中它很有效。你可以试试这个方法,我想你会很满意的。


0
如果您的 ListBox 不在 Panorama 控件中,那么您可以仅处理列表框的 SelectionChanged 事件,然后在页面的 ApplicationBar 中显示删除和搜索选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接