2

カスタムのデフォルト ボタン アタッチ ビヘイビアを使用しています (ここで定義されているように: Silverlight 4 Default Button Service )。

これを XAML で正常にバインドできますが、ネストされたユーザー コントロールでは、次の背後にあるコードでは機能しません。

public partial class MyNestedUserContol{

/// a DP for storing the name of the default button, used in the ElementName binding
public string DefaultButton {
    get { return (string)GetValue(DefaultButtonProperty); }
    set { SetValue(DefaultButtonProperty, value); }
}
public static readonly DependencyProperty DefaultButtonProperty =
    DependencyProperty.Register("DefaultButton", typeof(string), typeof(TeamReferenceFieldEditor), new PropertyMetadata(null));

...

private void CreateCustomControls(){
    ...
    TextBox tb = new TextBox();
    ...
    AddDefaultButtonBinding(tb);
    ...
}

private void AddDefaultButtonBinding(Control control) {
    Binding binding = new Binding();
    binding.ElementName = this.DefaultButton;
    control.SetBinding(DefaultButtonService.DefaultButtonProperty, binding); }

...
}

コードでこれのバインディングを作成するにはどうすればよいですか?
ありがとう、
マーク

4

1 に答える 1

0

最終的に、これは名前スコープの問題になります。ElementName に割り当てられた値は、TextBox が属する名前スコープと同じ名前スコープに存在しない可能性があります。

単純に使用することを検討しましたか:-

 private void MainPage_Load(object sender, RoutedEventArgs e)
 {
   LayoutRoot.AddHandler(UIElement.KeyUpEvent, LayoutRoot_KeyUp, true)
 }

 private void LayoutRoot_Keyup(object sender, KeyEventArgs e)
 {
   if (e.Key == Key.Enter)
   {
     // invoke default operation here
   }
 }

あなたの他の質問とブログ記事を読みました。最終的にテキストボックスとは何の関係もないデフォルトボタンを実装するために、テキストボックスのようなさまざまなコントロールに奇妙なプロパティを添付しなければならないのは、悪臭のように思えます。

Buttonデフォルトとして宣言されるボタンにプロパティをアタッチし(または、呼び出されたのサブクラスを作成しDefaultButton)、それを含む UserControl、Page、または ChildWindow と連携させて、キーを入力してください。これにより、この機能の提供に直接関係しない他のコントロールを使用する必要がなくなります。

于 2010-08-10T20:47:44.310 に答える