1

私はこのXAMLコードを持っています:

<Window x:Class="TTT_01.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" MouseLeftButtonDown="Window_MouseLeftButtonDown">
    <Canvas>
        <Rectangle Canvas.Left="146" Canvas.Top="110" Height="100" Name="rectangle1" Stroke="Black" Width="200" />
    </Canvas>
</Window>

これは背後にあるC#コードです:

public partial class MainWindow : Window
{      
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (rectangle1.IsMouseOver)
        {
            MessageBox.Show("Click!");
        }
    }
}

私が見ているのは白い長方形です。長方形をクリックすると、メッセージボックスがポップアップするはずです。Fillただし、 XAMLまたはMainWindowコンストラクターのいずれかで長方形のプロパティを初期化しない限り、これは発生しません。長方形をクリックしてもFill初期化されずにrectangle1.IsMouseOver残ります。false

何と関係がFillありIsMouseOverますか?

4

1 に答える 1

3

塗りつぶしは、コントロールのヒット テスト領域を指定するものの一部です。WPF コントロールでは、通常、長方形のヒット テストではなく、ピクセル パーフェクト ヒット テストを実行します。たとえば、<Ellipse/>XAML に を配置した場合、円周の外側をクリックしても、境界四角形の内側をクリックしても、Ellipse で MouseDown イベントが生成されません (ただし、これは明らかです)。同様に、Shape に Fill を指定しないということは、単に形状の内部が存在しないことを意味します。ヒット テストがネガティブになり、クリックが失敗する可能性があります。つまり、塗りつぶしのない形状は、ヒット テストの目的で輪郭のみを構成します。

境界線のみの透明な四角形 (またはその他のShape) が必要な場合は、内部でテストにヒットする場合は、 を指定しますFill="Transparent"

Gridこれは形状だけでなく、や などのコンテナーにも当てはまりBorderます。 a を指定しないBackgroundと、空の領域はヒット テストに登録されません。

于 2013-01-28T09:16:12.713 に答える