我有一个FrameworkElementFactory就像在代码中创建的文本框一样工作,因此没有xaml代码,我也在代码中设置了带有数据绑定的文本框。现在我想按 Enter 键更新此文本框数据绑定。我已经在这个Link中阅读了一种附加行为的方法,但它似乎与xaml代码一起使用。有没有办法在代码后面设置附加行为?
ListBox DDF_List = new ListBox();
FrameworkElementFactory Editable_TextBox = new FrameworkElementFactory(typeof(TextBox));
Binding text_binding = new Binding("Value");
Editable_TextBox.SetBinding(TextBox.TextProperty, text_binding);
DataTemplate Text_Layout = new DataTemplate();
Text_Layout.VisualTree = Editable_TextBox;
DDF_List.ItemTemplate = Text_Layout;
答案 0 :(得分:0)
您几乎肯定会在XAML中使用FrameworkElementFactory
执行此操作。你得到的是在XAML中做所有事情的完美案例。但如果你致力于以艰难的方式去做,那就是这样的。
使用Editable_TextBox.SetValue(
InputBindingsManager.UpdatePropertySourceWhenEnterPressedProperty,
TextBox.TextProperty);
,您可以像TextBox
上的任何其他相关属性一样设置它:
itemNameTextBox
更一般地说,现在将附加属性应用于C#中的InputBindingsManager.SetUpdatePropertySourceWhenEnterPressed(itemNameTextBox,
TextBox.TextProperty);
,其中var itemNameTextBox = new TextBox { Name = "itemNameTextBox" };
var binding = new Binding("ItemName")
{
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
itemNameTextBox.SetBinding(TextBox.TextProperty, binding);
// This is the line you're asking for:
InputBindingsManager.SetUpdatePropertySourceWhenEnterPressed(itemNameTextBox,
TextBox.TextProperty);
是TextBox:
<TextBox
Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=PropertyChanged}"
b:InputBindingsManager.UpdatePropertySourceWhenEnterPressed="TextBox.Text"
/>
附加属性,这个C#:
section4
与此XAML完全等效:
bullets