Klik gambar di dalam Acara kontrol tombol tidak diaktifkan

Saya memiliki kode berikut dan acara Klik tidak aktif ketika saya mengklik gambar. Ketika saya mengklik di luar gambar, acara klik tombol menyala.

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);  

Dalam acara x_Click yang ada hanyalah MessageBox.Show("Button clicked"); Di mana x adalah btn_Main dll...

ImgButtonImage_Click tidak akan aktif ketika saya mengklik gambar. Saya juga telah mencoba mengubah ZIndex tetapi tidak berhasil.


person k1f1    schedule 05.12.2012    source sumber


Jawaban (4)


Mengapa Anda menggunakan <telerik:RadImageEditor x:Name="imgButtonImage" /> di dalam panel tumpukan yang ada di dalam tombol? Memiliki editor gambar di dalam tombol tidak masuk akal bagi saya. Jika Anda ingin menampilkan gambar dengan teks di dalam tombol, Anda dapat menggunakan sesuatu yang mirip dengan:

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

Untuk menggunakan base64string sebagai sumber gambar, Anda dapat melakukan hal berikut:

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;

Untuk merangkum kode ini, dan menggunakannya langsung di xaml, Anda dapat membuat IValueConverter dan gunakan sesuatu seperti <Image Source="{Binding ...stringDataSource..., Converter={StaticResource MyBase64ImageConverter}}"/>

person João Simões    schedule 05.12.2012
comment
Tujuan dari Stackpanel adalah agar orientasi kumpulan kontrol (yaitu Gambar dan Teks) dapat diubah dari horizontal ke vertikal. RadImageEditor diambil dari beberapa kode lain - yang sudah memiliki metode untuk mengonversi gambar (yang datang sebagai string Base64) untuk ditampilkan di kontrol. - person k1f1; 05.12.2012
comment
Saya meningkatkan respons saya. Saya mendapat ide dari Stackpanel (saya selalu menggunakannya di tombol) tetapi saya enggan percaya RawImageEditor memiliki perilaku yang sama dengan Gambar di dalam tombol. Mereka memiliki tujuan berbeda. - person João Simões; 05.12.2012
comment
Terima kasih, hargai usahanya - tetapi BitmapImage tidak berisi metode BeginInit(). msdn.microsoft .com/en-us/library/ Ada saran lain? - person k1f1; 05.12.2012
comment
Ah, sayangku, tidak menyadari tag Silverlight! Sedang melihat msdn.microsoft.com/en -us/library/ Saat ini tidak dapat mengonfirmasi apakah dapat digunakan di Silverlight. - person João Simões; 05.12.2012

Menemukan jawabannya dengan bantuan JSimoes.

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

Terima kasih.

person k1f1    schedule 05.12.2012

Saya tidak tahu kontrol Telerik RadImageEditor tapi saya rasa ini menangani peristiwa gelembung mouse. Anda sebaiknya menggunakan peristiwa penerowongan (nama peristiwa dimulai dengan Preview) seperti PreviewMouseLeftButtonDown misalnya.

person Sisyphe    schedule 05.12.2012

Coba tambahkan acara ke xaml

<Button x:Name="btnMain" Background="Purple" Click="btnMain_Click" >           
person Lone Starr    schedule 05.12.2012