0

テキスト ボックス内の値の単位を選択できるコントロールを作成したいと考えていました。これをアーカイブするために、テキストボックスの後にボタンを付けて、使用可能なユニットを含む ListBox を含むホバー時にポップアップを開きました。

このポップアップにボタンを配置すると、すべて正常に動作し、ホバー効果が得られ、ボタンをクリックできます。しかし、ListBox は期待どおりに機能しません。特別なことを何もしていないので、リストボックスの項目をクリックしたりフォーカスしたりすることができません。ポップアップの FocusManager.IsFocusScope を true に設定すると、最初にウィンドウにフォーカスし、次に ListBox にフォーカスするために、2 回のクリックでアイテムを選択できます。プログラムでフォーカスを移動しても、どちらも役に立ちませんでした。

ポップアップの例:

<Popup x:Name="PART_UnitPopup" 
  PlacementTarget="{Binding}" 
  Placement="Bottom">
  <StackPanel>
    <ListBox x:Name="PART_UnitPopupListBox" ItemsSource="{Binding,Path=Units}"/>
    <Button Content="Click me!" />
  </StackPanel>
</Popup>

いくつかのことを読んで、ポップアップの開いたイベントまたはフォーカスイベントにフォーカスを移動していくつかの解決策を試しましたが、この作業をボタンのように通常のスタイルで動作させません。このタスクを達成するためにpopop以外の方法もあるかもしれませんが、それは良い解決策であると思われ、動作していると言われ、あまり変わらないコードの束を見つけました.

4

1 に答える 1

0

実際の解決策から少し離れた回避策を見つけましたが、共有したいと思います。ボタンの継ぎ目がうまく機能するので、ボタンを ListBox` アイテム テンプレートに配置し、スタイルを変更してフラットなオブジェクトのように見せました。ホバーとインタラクションは、2 回クリックしなくても機能するようになりました。

落とし穴として、ボタンがすべてのクリックを傍受するため、選択変更イベントに頼ることができなくなりました。そのため、変更されたハンドラーが以前に行ったのと同じ作業を行うコマンドをボタンに追加しました。これで基本的に作業は完了しますが、他のアイデアも歓迎します。

于 2012-10-23T14:23:49.673 に答える