คลิกรูปภาพภายในเหตุการณ์การควบคุมปุ่มไม่เริ่มทำงาน

ฉันมีรหัสต่อไปนี้และเหตุการณ์การคลิกไม่เริ่มทำงานเมื่อฉันคลิกรูปภาพ เมื่อฉันคลิกนอกภาพ เหตุการณ์การคลิกปุ่มจะเริ่มขึ้น

เอ็กซ์เอเอ็มแอล:

<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("Button clicked"); โดยที่ x คือ btn_Main ฯลฯ ...

imgButtonImage_Click จะไม่ทำงานเมื่อฉันคลิกที่ภาพ ฉันได้ลองเปลี่ยน ZIndex เป็นไม่มีประโยชน์แล้ว


person k1f1    schedule 05.12.2012    source แหล่งที่มา


คำตอบ (4)


เหตุใดคุณจึงใช้ <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}}"/>

person João Simões    schedule 05.12.2012
comment
วัตถุประสงค์ของ Stackpanel คือ การวางแนวของคอลเลกชันของตัวควบคุม (I.E. รูปภาพและข้อความ) สามารถเปลี่ยนจากแนวนอนเป็นแนวตั้งได้ RadImageEditor นำมาจากโค้ดอื่นซึ่งมีวิธีการแปลงรูปภาพอยู่แล้ว (ซึ่งมาในรูปแบบสตริง Base64) เพื่อแสดงในส่วนควบคุม - person k1f1; 05.12.2012
comment
ฉันปรับปรุงการตอบสนองของฉัน ฉันได้รับแนวคิดจาก Stackpanel (ฉันใช้มันตลอดเวลาในรูปแบบปุ่ม) แต่ฉันไม่เต็มใจที่จะเชื่อว่า RawImageEditor มีพฤติกรรมเหมือนกับรูปภาพภายในปุ่ม พวกเขามีวัตถุประสงค์ที่แตกต่างกัน - person João Simões; 05.12.2012
comment
ขอขอบคุณ ขอขอบคุณสำหรับความพยายาม แต่ BitmapImage ไม่มีเมธอด BeginInit() msdn.microsoft .com/en-us/library/ มีข้อเสนอแนะอื่นๆ อีกไหม - person k1f1; 05.12.2012
comment
แย่จัง ไม่รู้แท็ก Silverlight เลย! กำลังดูที่ msdn.microsoft.com/en -us/library/ ไม่สามารถยืนยันความถูกต้องได้ในขณะนี้หากสามารถใช้งานได้ใน Silverlight - person João Simões; 05.12.2012

คิดออกด้วยความช่วยเหลือของ JSimoes

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

ขอบคุณ.

person k1f1    schedule 05.12.2012

ฉันไม่รู้จักตัวควบคุม Telerik RadImageEditor แต่ฉันเดาว่ามันจัดการเหตุการณ์ฟองเมาส์ได้ คุณควรใช้เหตุการณ์ทันเนลแทน (ชื่อเหตุการณ์ที่ขึ้นต้นด้วย Preview) เช่น PreviewMouseLeftButtonDown เป็นต้น

person Sisyphe    schedule 05.12.2012

ลองเพิ่มเหตุการณ์ใน xaml

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