0

我有以下代码,单击图像时未触发 Click 事件。当我在图像外部单击时,会触发按钮单击事件。

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("Button clicked"); 其中 x 是 btn_Main 等...

当我单击图像时,imgButtonImage_Click 不会触发。我也尝试过更改 ZIndex 无济于事。

4

4 回答 4

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}}"/>

于 2012-12-05T12:44:11.917 回答
1

在 JSimoes 的帮助下想通了。

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

谢谢。

于 2012-12-05T14:47:36.973 回答
0

我不知道 Telerik RadImageEditor 控件,但我猜它处理鼠标冒泡事件。您应该改用隧道事件(事件名称以 开头PreviewPreviewMouseLeftButtonDown,例如。

于 2012-12-05T12:36:54.560 回答
0

尝试将事件添加到 xaml

<Button x:Name="btnMain" Background="Purple" Click="btnMain_Click" >           
于 2012-12-05T13:20:58.913 回答