1

マウスが現在ホバリングしている場所に基づいて、さまざまな情報を表示したい WPF の画像があります。私はこれをウェブサイトで見たことがあることを知っています.WPFでそれを行うためのコードを理解できないようです.

私が使用している画像は米国の地図であり、ユーザーが国境を越えるときに州固有の情報を表示する必要があります。現在、私が使用している実装はPath、マップの上に透明に描画された一連の であり、Mouse.MouseEnterイベントを使用して変更をトリガーします。問題は、更新がひどいラグに悩まされているように見えること、またはMouseEnterイベントが常に適切にキャッチされないことです。

これを行うためのより良い方法を知っている人はいますか?

サンプル C#

    private void wyoming_MouseEnter(object sender, MouseEventArgs e)
    {            
        //stateName.Text = "Wyoming";            
    }

サンプル XAML

<Canvas MouseDown="Canvas_MouseDown" Name="canvas">
    <Viewbox Stretch="Uniform">
        <Image Source="USA.png" />
    </Viewbox>
    <Path Name="wyoming" Stroke="Transparent" StrokeThickness="1" Mouse.MouseEnter="wyoming_MouseEnter" Mouse.MouseMove="wyoming_MouseMove">
        <Path.Data>
            <PathGeometry>
                <PathGeometry.Figures>
                    <PathFigureCollection>
                        <PathFigure IsClosed="True" StartPoint="184,121" >  <!--NW-->
                            <PathFigure.Segments>
                                <PathSegmentCollection>
                                    <LineSegment Point="266,129" />
                                    <LineSegment Point="264,193" />
                                    <LineSegment Point="203,190" /> 
                                    <LineSegment Point="177,186" /> 
                                </PathSegmentCollection>
                            </PathFigure.Segments>
                        </PathFigure>
                    </PathFigureCollection>
                </PathGeometry.Figures>
            </PathGeometry>
        </Path.Data>
    </Path>
</Canvas>
4

2 に答える 2

1

さて、これをもっといじってみると、私の問題は、パスを塗りつぶしておらず、線としてのみ保持していることにあることがわかりました。これにより、基本的に非常に小さなイベント トリガー領域が作成され、そのため WPF はイベントを見逃すことがありました。それらを透明で埋めることにより、すべてが迅速に機能します。

于 2012-06-21T19:51:50.107 に答える
0

個人的にこの同じインスタンスに対して行ったこと (タイム ゾーンと放送エリアに関する情報にラベルを付けていた場合を除く) は、マウスオーバーでアクティブにしたいエリアの透明なパス シェイプを作成し、それらを米国の地図の上に配置して、添付しました。 MouseEnter/MouseLeave イベントのそれぞれに対するイベント トリガー。ユーザーが任意のパスの領域にマウスを合わせると、その条件が発生し、指定されたアクションが実行されます。私の例では、ラジオ局の放送時間を示していました。地域とタイムゾーンに基づくプログラム。そのため、マウスオーバーされた場合、情報ボックスの可視性は可視に設定されました。MouseLeave では、同じ情報ボックスが Collapsed に設定されていました....など

これは非常に効果的で、非常にうまく機能し、パスで作成した正確な形状を使用すると、インタラクティブな領域を非常に明確にすることができます. ソースを掘り起こすことができれば共有してみますが、このプロジェクトは 1 年以上前のものなので、この説明で創造性を発揮するのに十分なアイデアが得られることを願っています. :)

于 2012-06-21T19:19:33.183 に答える