要素ツリーから始めましょう。一番上の要素は、ApplicationCommands.Find
コマンドを登録したWPFウィンドウです。 一部の子要素には、このコマンドを指し示すジェスチャーキーENTERを持つKeyBindingがあります。それはOKです。誰かがENTERを押すとコマンドが実行されます。 中には、いくつかの要素を検索して選択するためのポップアップを備えたカスタムコントロールがあります。しかし、この場所では、 私はカスタムコントロールの外でキーイベントのバブリングを許可したくありません。しかし、私は KeyDown += new KeyEventHandler (..)
のためにe.handled = true
を設定します。これは、バブリングされたルーティングイベントであると想定されています。そのカスタムコントロール内のすべてのコントロール(テキストボックスなど)は、あらゆる種類の入力を無視します。 しかし、私はCustomControlのレベルで、葉から最上位のコントロールの親まで、それ以上のバブリングを止めたいだけです! なぜですか?私はPreviewKeyDown
をフィルタリングしていないので、イベントはリーフまで伝播していなければなりません。そして、親に戻るべきですが、そうではありません。サンプルコード: WPFは、コントロールの外部でイベントのバブリングを防止します。
EDITEDありがとう
<UserControl x:Class="WpfApplication5.TestUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<StackPanel Orientation="Vertical">
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
</UserControl>
/*
* I want to stop bubbling at this level. Let us say if we click 'enter' on the level of the TextBox leaf,
* it should propagate until the TestUserControl is reached and then stop.
*/
public partial class TestUserControl : UserControl
{
public TestUserControl()
{
InitializeComponent();
}
}
<Window x:Class="WpfApplication5.Window6"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication5"
Title="Window6" Height="300" Width="300">
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Find" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Gesture="Enter" Command="ApplicationCommands.Find" />
</Window.InputBindings>
<Grid>
<local:TestUserControl />
</Grid>
</Window>
public partial class Window6 : Window
{
public Window6()
{
InitializeComponent();
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("Executed");
}
}
正確ではありません。私はカスタムコントロールからのメインウィンドウにイベントを伝播を停止したいです。しかし、ありがとう –
それは私が理解したものです。私はいくつかのコードが役立つかもしれないと思う。 – Natxo
こんにちはPaN1C、私はあなたのサンプルコード – Natxo