Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 未为TreeView项目引发LostFocus_C#_Wpf_Textbox_Lostfocus - Fatal编程技术网

C# 未为TreeView项目引发LostFocus

C# 未为TreeView项目引发LostFocus,c#,wpf,textbox,lostfocus,C#,Wpf,Textbox,Lostfocus,在我的WPF C#项目中,我创建了一个树状视图。每个TreeViewItem都有一个LostFocus事件,当项目失去焦点时必须引发该事件。 我还创建了一个按钮,当用户想要更改某个TreeViewItem的标题时,需要单击该按钮。 用户在TreeView中选择后,可以单击按钮,出现一个文本框来替换TreeView项目标题。 如果用户没有单击TextBox而是单击另一个TreeViewItem,则不会引发LostFocus事件。否则,若用户单击文本框,然后更改焦点,则会引发该文本框。 我还使用了t

在我的WPF C#项目中,我创建了一个树状视图。每个TreeViewItem都有一个LostFocus事件,当项目失去焦点时必须引发该事件。 我还创建了一个按钮,当用户想要更改某个TreeViewItem的标题时,需要单击该按钮。 用户在TreeView中选择后,可以单击按钮,出现一个文本框来替换TreeView项目标题。 如果用户没有单击TextBox而是单击另一个TreeViewItem,则不会引发LostFocus事件。否则,若用户单击文本框,然后更改焦点,则会引发该文本框。 我还使用了
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