2012-12-05 99 views
0

我點擊圖片時,下面的代碼和點擊事件不會觸發。 當我在圖像外單擊時,按鈕單擊事件觸發。按鈕控制事件中點擊圖像不能觸發

XAML:

<Grid x:Name="LayoutRoot" Background="White"> 
    <Button x:Name="btnMain" Background="Purple" >    
     <StackPanel x:Name="spButtonPanel" Background="Black"> 
      <telerik:RadImageEditor x:Name="imgButtonImage" /> 
      <TextBlock x:Name="tbButtonText" /> 
     </StackPanel> 
    </Button> 
</Grid> 

CS:

this.btnMain.Click += new RoutedEventHandler(btnMain_Click); 
this.imgButtonImage.MouseLeftButtonDown += new MouseButtonEventHandler(imgButtonImage_Click); 
this.spButtonPanel.MouseLeftButtonDown += new MouseButtonEventHandler(spButtonPanel_Click); 

在x_Click事件只是MessageBox.Show( 「按鈕,點擊」); 其中x是btn_Main等...

當我單擊圖像時,imgButtonImage_Click不會觸發。 我也試着改變ZIndex無濟於事。

回答

0

我不知道Telerik RadImageEditor控件,但我想它可以處理鼠標冒泡事件。例如,您應該使用隧道事件(事件名稱以Preview開頭),例如PreviewMouseLeftButtonDown

1

爲什麼在按鈕內部的堆棧面板中使用<telerik:RadImageEditor x:Name="imgButtonImage" />?在按鈕中放置圖像編輯器對我來說沒有意義。 如果你想顯示的圖像的一個按鈕,你可以使用類似的東西里面的文字:

<Button Style="{StaticResource MyButtonStyle}"> 
    <StackPanel> 
     <Image Source="{Binding ...} Margin="10" /> 
     <TextBlock Text="Localizable Text" /> 
    </StackPanel> 
</Button> 

要使用base64string作爲圖像源,你可以做到以下幾點:

string bgImage64 = // image stored in string 
byte[] binaryData = Convert.FromBase64String(bgImage64); 

BitmapImage bi = new BitmapImage(); 
bi.BeginInit(); 
bi.StreamSource = new MemoryStream(binaryData); 
bi.EndInit(); 

imgButtonImage.Source = bi; 

爲了包裹這個代碼,並在XAML直接使用,您可以創建一個IValueConverter和使用類似<Image Source="{Binding ...stringDataSource..., Converter={StaticResource MyBase64ImageConverter}}"/>

+0

Stackpanel的目的是控制集合(I.E.圖像和文本)的方向可以從水平變爲垂直。 RadImageEditor是從其他一些代碼中獲得的 - 它已經有方法來轉換圖像(它以Base64字符串形式)以顯示在控件中。 – k1f1

+0

我改善了我的迴應。我從Stackpanel得到了這個想法(我一直在按鈕中使用它),但我不願意相信RawImageEditor與按鈕中的圖像具有相同的行爲。他們有不同的目的。 –

+0

謝謝,欣賞努力 - 但BitmapImage不包含BeginInit()方法。 http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage(v=vs.95).aspx還有其他建議嗎? – k1f1

0

嘗試添加事件到XAML

<Button x:Name="btnMain" Background="Purple" Click="btnMain_Click" >   
1

用JSimoes幫助找出來。

 BitmapImage bi = new BitmapImage(); 
     bi.SetSource(new MemoryStream(imageBytes)); 
     imgButtonImage.Source = bi; 

謝謝。

相關問題