2017-07-06 88 views
0

我是WPF的新手,并创建了一个可拖动的按钮,其中有一个图像 - 这很好用......但我似乎无法捕获包含图片?捕获单击WPF中的图像的按钮事件

<Window x:Class="PAD.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:PAD" 
    mc:Ignorable="d" 
    Title="C2D" Height="134" Width="134" WindowStyle="None" Background="Transparent" Foreground="Transparent" BorderBrush="Transparent" BorderThickness="0" ResizeMode="NoResize" AllowsTransparency="True"> 
<Grid x:Name="ClickIcon" Background="Transparent" > 

    <Button x:Name="dialButton" HorizontalAlignment="Left" VerticalAlignment="Top" Width="130" Height="130" Foreground="Transparent" Background="Transparent" BorderThickness="0" BorderBrush="Transparent" > 
     <Button.Template> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid> 
        <Ellipse Fill="Transparent"/> 
        <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
        <Image x:Name="phoneIcon" Width="128" Height="128" Source="c:\users\chapmd1\documents\visual studio 2015\Projects\PAD\PAD\red-phone-icon_300205.png" MouseDown="image_MouseDown" /> 
       </Grid> 
      </ControlTemplate> 
     </Button.Template> 

    </Button> 


private void image_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
      this.DragMove(); 

    } 

我试过按钮上的onClick,但没有被捕获?

+0

为什么要在'Button.Template'里面'Image'来''拖动''Window''? –

回答

0

不知道你想要什么来实现的,但如果你想拖动窗口,而按钮,然后再做别的事情,你可以这样做:

private void image_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     while (e.ButtonState == MouseButtonState.Pressed) 
     { 
      this.DragMove(); 
      Debug.WriteLine("Dragged!"); 
     } 

     var image = sender as Image; 
     object parent = FindParent(image); 
     while (parent != null && parent.GetType() != typeof(Button)) 
     { 
      parent = FindParent((FrameworkElement)parent); 
     } 

     var bt = parent as Button; 
     if(bt != null) 
     bt.ClickMode = ClickMode.Press; 
    } 

    private void DialButton_OnClick(object sender, RoutedEventArgs e) 
    { 
     Debug.WriteLine("Clicked!"); 
    } 

    DependencyObject FindParent(FrameworkElement ui) 
    { 
     return ui.TemplatedParent; 
    } 
} 
0

您的问题可能是其他地方。这按预期工作:

XAML:

<Grid x:Name="ClickIcon" Background="Transparent" > 
    <Button 
     Click="dialButton_Click" 
     x:Name="dialButton" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" Width="130" Height="130" 
     Foreground="Transparent" 
     Background="Transparent" 
     BorderThickness="0" 
     BorderBrush="Transparent"> 
     <Button.Template> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid > 
        <Ellipse Fill="Transparent"/> 
        <ContentPresenter 
         Content="{TemplateBinding Content}" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center"/> 
        <Image x:Name="phoneIcon" 
          Width="128" Height="128" 
          Source="..." 
          MouseDown="phoneIcon_MouseDown"/> 
       </Grid> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</Grid> 

C#:

private void phoneIcon_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    System.Diagnostics.Trace.WriteLine("phoneIcon_MouseDown"); 
} 

private void dialButton_Click(object sender, RoutedEventArgs e) 
{ 
    System.Diagnostics.Trace.WriteLine("dialButton_Click"); 
} 
+0

奇 - 我没有得到那触发... image_MouseDown, image_MouseDown, image_MouseDown。 – BlueChippy

+0

嗯,真的很奇怪。你是否在事件处理程序中放置断点?不要,只需在Visual Studio中观察跟踪输出即可。 – Tom