簡體   English   中英

按下Button1的邊緣時,有時無法打開MessageBox

[英]MessageBox sometimes doesnt open when pressing edges of Button1

xaml代碼在這里;

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Button x:Name="Button1" Height="25" Width="100" Content="Click Me" Click="Button1_Click" RenderTransformOrigin="0.5,0.5">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="RenderTransform">
                            <Setter.Value>
                                <ScaleTransform ScaleX="0.9" ScaleY="0.9"/>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</Grid>
</Window>

C#代碼在這里;

private void Button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Thanks for click");
}

vb.net代碼在這里;

Private Sub Button1_Click(sender As Object, e As RoutedEventArgs)
    MessageBox.Show("Thanks for click")
End Sub

運行以上代碼,然后單擊Button1的中心,然后看到MessageBox顯示您的感謝信息。

我的問題在這里:

當您單擊Button1的邊緣時,您將看到Button1表現為按下效果,但MessageBox沒有打開! (實際上有時打開有時不打開!)

那么,為什么單擊Button1的邊緣有時 MessageBox 有時無法打開?

請注意,我嘗試了LayoutTransform而不是RenderTransform,但是此問題仍然存在。

喬恩(喬恩)有一個正確的原因,你不能打開MessageBox 正確的原因是您的按鈕的大小,然后超出范圍。

您應該重新定義按鈕樣式,以使按鈕在任何地方都可以命中。

<Style TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <!-- This transparent background is important,
                     because it helps you to hit the button even when it is scaled to 0.9. -->
                <Border x:Name="OuterBorder" Background="Transparent">
                    <Border x:Name="RootBorder" Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <ContentPresenter />
                    </Border>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="RootBorder" Property="RenderTransform">
                            <Setter.Value>
                                <ScaleTransform ScaleX="0.9" ScaleY="0.9" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

請注意,我們在外部添加了一個透明的Border以便按鈕始終可以被邊緣擊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM