Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用{}的事件绑定_C#_Wpf_Events_Binding - Fatal编程技术网

C# 使用{}的事件绑定

C# 使用{}的事件绑定,c#,wpf,events,binding,C#,Wpf,Events,Binding,我正在代码隐藏中创建一个文本框 TextBox textBox = new TextBox(); 我还有一个功能: private void TextBox_Focus(object sender, RoutedEventArgs e) { // does something } 我想将TextBox\u Focus绑定到TextBox.GotFocus 而不是像这样单独设置每个属性 TextBox textBox = new TextBox(); textBox.Width = 1

我正在代码隐藏中创建一个
文本框

TextBox textBox = new TextBox();
我还有一个功能:

private void TextBox_Focus(object sender, RoutedEventArgs e)
{
    // does something
}
我想将
TextBox\u Focus
绑定到
TextBox.GotFocus

而不是像这样单独设置每个属性

TextBox textBox = new TextBox();
textBox.Width = 100;
textBox.Height = 25;
textBox.Background = Brushes.White;
textBox.Foreground = Brushes.Blue;
textBox.GotFocus += TextBox_Focus;
我更喜欢使用大括号(花括号)
{}

TextBox textBox = new TextBox()
{
   Width = 100,
   Height = 25,
   Background = Brushes.White,
   Foreground = Brushes.Blue
};
但是,当我使用大括号方法时,我无法绑定到事件

我试过做以下几件事,但都没有用

TextBox textBox = new TextBox()
{
   Width = 100,
   Height = 25,
   Background = Brushes.White,
   Foreground = Brushes.Blue,
   this.GotFocus += TextBox_Focus
};
问题: 是否有一种使用大括号(
{}
)方法绑定事件的方法

更新:
元素是动态创建的,所以我不能使用XAML。

为什么不使用XAML,您会发现它非常灵活。 也是WPF的事

<TextBox x:Name="textBox"
         Width="100"
         Height="25"
         Background="White"
         Foreground="Blue"
         GotFocus="TextBox_Focus" />

根据您的评论,您可以这样做:

<ListBox ItemsSource="{Binding MyCollection}">
     <ListBox.ItemTemplate>
          <DataTemplate>
                  <TextBox Text="{Binding }"
                           Width="100"
                           Height="25"
                           Background="White"
                           Foreground="Blue"
                           GotFocus="TextBox_Focus" />
          </DataTemplate>
     </ListBox.ItemTemplate>

如果在向收藏中添加项目时将收藏设置为可观察收藏,它将为您更新列表框。

否。仅用于设置属性或字段。您正在尝试订阅一个事件,该事件在对象初始值设定项语法中不受支持

正如其他评论者所说,XAML是初始化WPF控件的最佳方式

显然Mono支持你的要求。请参阅:

试试看
EventManager.RegisterClassHandler(typeof(TextBox)、TextBox.GotKeyboardFocusEvent、new RoutedEventHandler(yourMethod());

大括号方法是一个对象初始值设定项,它可以帮助您发现问题的开始,它会说:
我正在代码隐藏中创建一个文本框。
-这通常是一个非常糟糕的做法,除非您有很好的理由。您能解释一下您需要什么,以便我可以告诉您在WPF中实现它的正确方法吗?您可以使用绑定和XAML,unless的GotFocus事件也是可变的。这里的答案有一些额外的信息,可能会引起@NickFreeman-facepalm lol的兴趣。只是为了说明它有多好!:d感谢响应。不幸的是,我希望我可以使用XAML,但是,元素需要动态创建。您仍然可以使用XAML动态添加项目。代码behind不是一个神奇的实体。你想生成什么?它是一个项目的集合,因为
DataTemplate
将是前进的方向。@ywm XAML最终都变成了代码。如果在特定的上下文中它更快或更容易,那么你可以使用它,如果不是(即使可能的话)那么就不要了。当然,但是XAML在这种情况下实际上是一样的。但是它符合其他人在维护您的WPF应用程序时所期望的范例。感谢您的解释!我还将研究
Mono C.
。感谢您的帮助!这比通过
object.event+=event>订阅事件更可取吗thandler
?同样,仍然无法通过对象初始值设定项完成,因此没有回答问题。