C# 未为TreeView项目引发LostFocus
在我的WPF C#项目中,我创建了一个树状视图。每个TreeViewItem都有一个LostFocus事件,当项目失去焦点时必须引发该事件。 我还创建了一个按钮,当用户想要更改某个TreeViewItem的标题时,需要单击该按钮。 用户在TreeView中选择后,可以单击按钮,出现一个文本框来替换TreeView项目标题。 如果用户没有单击TextBox而是单击另一个TreeViewItem,则不会引发LostFocus事件。否则,若用户单击文本框,然后更改焦点,则会引发该文本框。 我还使用了C# 未为TreeView项目引发LostFocus,c#,wpf,textbox,lostfocus,C#,Wpf,Textbox,Lostfocus,在我的WPF C#项目中,我创建了一个树状视图。每个TreeViewItem都有一个LostFocus事件,当项目失去焦点时必须引发该事件。 我还创建了一个按钮,当用户想要更改某个TreeViewItem的标题时,需要单击该按钮。 用户在TreeView中选择后,可以单击按钮,出现一个文本框来替换TreeView项目标题。 如果用户没有单击TextBox而是单击另一个TreeViewItem,则不会引发LostFocus事件。否则,若用户单击文本框,然后更改焦点,则会引发该文本框。 我还使用了t
textBox.Focus()
和Keyboard.Focus(textBox)
,但是这个功能不起作用。
我怎样才能解决这个问题
我想说清楚,在写帖子之前,我已经读了另一个答案
下面是代码片段
private void RenameButton_Click(object sender, RoutedEventArgs e)
{
TreeViewItem twItemSelected = (TreeViewItem)this.Treeview_PropertyDefinition.SelectedItem;
var textBox = new TextBox()
{
Text = (String)twItemSelected.Header,
};
textBox.Focus();
Keyboard.Focus(textBox);
if (textBox.IsFocused)
MessageBox.Show("focused");
twItemSelected.Header = textBox;
//check which property is currently selected
String parentName = ((TreeViewItem)twItemSelected.Parent).Name;
((TreeViewItem)twItemSelected.Parent).Parent).Name;
//get values from file
//show page based on parent value
switch (parentName)
{
case "RectangleBar_TreeviewItem":
textBox.LostFocus += (o, ev) =>
{...}
}
请原谅我这么说,但是每一个读过你的问题的WPF普通用户可能都会同情地摇摇头。我们为您感到难过,因为您还没有学会真正的“WPF禅”,即利用数据绑定、模板和触发器使您的UI动态化,而不是采用老式方式。WPF之所以美丽是因为它的这种能力。它还使事情“1000%”变得更容易 我建议您将UI更改为使用TreeViewItem上的触发器,以根据您在TreeViewItem中定义的属性替换HeaderTemplate。双击项目时,将此属性设置为true。当IsKeyboardFocusWithin变为false时,将其设置为false(您可以覆盖元数据并为此添加PropertyChangedCallback) 至于你的
LostFocus
问题,我怀疑你的问题在于你有多个焦点范围
有关以“WPF方式”执行此操作的其他详细信息
下面是有关如何使用附加属性、触发器和模板实现此功能的一些详细信息
模板可以是简单的,也可以是复杂的。这里有一个简单的例子:
<DataTemplate x:Key="NormalTemplate">
<ContentPresenter />
</DataTemplate>
<DataTemplate x:Key="TextBoxTemplate">
<TextBox Text="{Binding}" />
</DataTemplate>
请尝试学习并投资于WPF
的模式和实践,以便轻松实现您想要实现的目标
还有一些项目可以帮助您开始使用TreeView实现您想要的目标
请原谅我这么说,但是每一个看过你的问题的WPF普通用户可能都会同情地摇摇头。我们为您感到难过,因为您还没有学会真正的“WPF禅”,即利用数据绑定、模板和触发器使您的UI动态化,而不是采用老式方式。WPF之所以美丽是因为它的这种能力。它还使事情“1000%”变得更容易 我建议您将UI更改为使用TreeViewItem上的触发器,以根据您在TreeViewItem中定义的属性替换HeaderTemplate。双击项目时,将此属性设置为true。当IsKeyboardFocusWithin变为false时,将其设置为false(您可以覆盖元数据并为此添加PropertyChangedCallback) 至于你的
LostFocus
问题,我怀疑你的问题在于你有多个焦点范围
有关以“WPF方式”执行此操作的其他详细信息
下面是有关如何使用附加属性、触发器和模板实现此功能的一些详细信息
模板可以是简单的,也可以是复杂的。这里有一个简单的例子:
<DataTemplate x:Key="NormalTemplate">
<ContentPresenter />
</DataTemplate>
<DataTemplate x:Key="TextBoxTemplate">
<TextBox Text="{Binding}" />
</DataTemplate>
请尝试学习并投资于WPF
的模式和实践,以便轻松实现您想要实现的目标
还有一些项目可以帮助您开始使用TreeView实现您想要的目标
请原谅我这么说,但是每一个看过你的问题的WPF普通用户可能都会同情地摇摇头。我们为您感到难过,因为您还没有学会真正的“WPF禅”,即利用数据绑定、模板和触发器使您的UI动态化,而不是采用老式方式。WPF之所以美丽是因为它的这种能力。它还使事情“1000%”变得更容易 我建议您将UI更改为使用TreeViewItem上的触发器,以根据您在TreeViewItem中定义的属性替换HeaderTemplate。双击项目时,将此属性设置为true。当IsKeyboardFocusWithin变为false时,将其设置为false(您可以覆盖元数据并为此添加PropertyChangedCallback) 至于你的
LostFocus
问题,我怀疑你的问题在于你有多个焦点范围
有关以“WPF方式”执行此操作的其他详细信息
下面是有关如何使用附加属性、触发器和模板实现此功能的一些详细信息
模板可以是简单的,也可以是复杂的。这里有一个简单的例子:
<DataTemplate x:Key="NormalTemplate">
<ContentPresenter />
</DataTemplate>
<DataTemplate x:Key="TextBoxTemplate">
<TextBox Text="{Binding}" />
</DataTemplate>
请尝试学习并投资于WPF
的模式和实践,以便轻松实现您想要实现的目标
还有一些项目可以帮助您开始使用TreeView实现您想要的目标
请原谅我这么说,但是每一个看过你的问题的WPF普通用户可能都会同情地摇摇头。我们为您感到难过,因为您还没有学会真正的“WPF禅”,即利用数据绑定、模板和触发器使您的UI动态化,而不是采用老式方式。WPF之所以美丽是因为它的这种能力。它还使事情“1000%”变得更容易 我建议您将UI更改为使用TreeViewItem上的触发器,以根据您在TreeViewItem中定义的属性替换HeaderTemplate。双击项目时,将此属性设置为true。当IsKeyboardFocusWithin变为false时,将其设置为false(您可以覆盖元数据并为此添加PropertyChangedCallback) 至于你的
LostFocus
问题,我怀疑你的问题在于你有多个焦点范围
有关以“WPF方式”执行此操作的其他详细信息
下面是有关如何使用附加属性、触发器和模板实现此功能的一些详细信息
你的te