1

タッチ イベントを受信できる WPF でフローティング コントロールを作成しようとしています。私はたくさん検索しましたが、見つけたフローティング コントロールの唯一の解決策はポップアップ コントロールでした。問題: ポップアップ コントロールがタッチ イベントを受信できません。SurfaceListBoxまた、ポップアップ内で使用しているため、タッチイベントが必要です。次の方法でポップアップにタッチイベントを受信させようとしました:

TouchExtensions.EnableSurfaceInput((HwndSource)HwndSource.FromVisual(this.selectionListPopup));

しかし、それは何の効果もありませんでした。ポップアップがタッチを受け取れるようにする方法はありますか? 他に使用できるコントロールや方法はありますか?

私の最終的な目標は、コントロールを他のコントロールの上に浮かせることです。つまり、他のコントロールによってクリップされたり、隠されたりすることはありません。

これまでに使用した XAML は次のとおりです。

<Popup Name="selectionListPopup"
        PlacementTarget="{Binding ElementName=selectedItemButton}"
        Placement="Relative"
        VerticalOffset="{Binding ElementName=this, Path=SelectionListTop}"
        HorizontalOffset="{Binding ElementName=this, Path=SelectionListLeft}"
        IsOpen="{Binding ElementName=this, Path=IsSelecting, Mode=TwoWay}"
        StaysOpen="False"
        AllowsTransparency="True" 
        Focusable="False">
        <s:SurfaceListBox Name="selectionList"
                          ItemsSource="{Binding ElementName=this, Path=ItemsSource}"
                          SelectedItem="{Binding ElementName=this, Path=SelectedItem, Mode=TwoWay}"
                          SelectionChanged="OnSelectionListSelectionChanged">
        </s:SurfaceListBox>
</Popup>
4

1 に答える 1

2

これは、Popup の HwndSource ではなく、Popup.Child の視覚的な親の HwndSource です。奇妙に聞こえますね。

したがって、ポップアップの Opened イベントで次のコードを呼び出します。

var myPopup = sender as Popup;

HwndSource hwndSource = (HwndSource)PresentationSource.FromVisual((Visual)VisualTreeHelper.GetParent(myPopup.Child)); 

hwndSource.EnableSurfaceInput();
于 2012-08-24T21:05:59.423 に答える