按钮事件故障中的另一个WPF / XAML图像

时间:2013-12-12 23:54:59

标签: wpf xaml events

我已经将以下XAML代码放在一起,试图找出为什么Click事件仅在我单击Button内的Image或TextBlock内容时触发。 Button中这些区域周围的区域不会触发click事件:

<Window x:Class="TestBedApp.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <StackPanel Orientation="Horizontal" Background="Bisque">
        <Border BorderThickness="2" BorderBrush="Aqua">
            <Button x:Name="btn" Click="btn_Click" Background="Olive">
                <Button.Template>
                    <ControlTemplate>
                        <Border BorderThickness="2" BorderBrush="Red">
                            <StackPanel Orientation="Vertical">
                                <Image x:Name="img"
                                    Source="Images/MyImage.png"
                                    Width="100"
                                    Height="72"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Margin="10">
                                </Image>
                                <TextBlock Text="Click Me" Foreground="White"/>
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </Border>
    </StackPanel>
</Window>

代码背后:

private void btn_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Ooosh");
}

我使用ContentPresenters在网上看到了一些样本,但我正在解释这个问题。我对XAML非常陌生,只是让我的脚湿透了。我正在使用VS2013和.NET 4.5应用程序。

3 个答案:

答案 0 :(得分:2)

这是因为您的StackPanel上尚未设置background属性。 WPF只会注册你点击的东西,如果有实际的东西被渲染,这是设计的,并允许你做一些事情,如添加几何等异常形状的按钮。如果您确实希望按钮的这些区域是透明的,那么将ControlTemplate中StackPanel的background属性设置为“Transparent”。

答案 1 :(得分:0)

您是否有理由设置ControlTemplate?如果主要目的是在Button或其他元素中获取图像,您可以简单地将其添加为子项:

<StackPanel Orientation="Horizontal" Background="Bisque">
    <Border BorderThickness="2" BorderBrush="Aqua">
        <Button x:Name="btn" Click="btn_Click" Background="Olive">
            <Border BorderThickness="2" BorderBrush="Red">
                <StackPanel Orientation="Vertical">
                    <Image x:Name="img"
                                Source="Images/MyImage.png"
                                Width="100"
                                Height="72"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Margin="10">
                    </Image>
                    <TextBlock Text="Click Me" Foreground="White"/>
                </StackPanel>
            </Border>
        </Button>
    </Border>
</StackPanel>

答案 2 :(得分:0)

你应该试试这个..

删除按钮的点击事件,并使用边框的点击事件显示消息框。