首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不为LostFocus引发TreeViewItem

不为LostFocus引发TreeViewItem
EN

Stack Overflow用户
提问于 2014-04-11 16:26:25
回答 1查看 704关注 0票数 0

在我的WPF C#项目中,我创建了一个TreeView。每个TreeViewItem都有一个LostFocus事件,当项目失去焦点时必须引发该事件。我还创建了一个按钮,当用户想要更改某个TreeViewItem的头时,需要单击该按钮。用户在TreeView中选择之后,可以单击按钮,然后出现一个TextBox替换TreeViewItem头。如果用户不单击TextBox,而是单击另一个TreeViewItem,则不会引发LostFocus事件。否则,如果用户单击TextBox,然后更改焦点,则会引发该焦点。我也使用过textBox.Focus()Keyboard.Focus(textBox),但是不起作用。我怎么才能解决这个问题?

为了澄清,在创建帖子之前,我阅读了另一篇文章,所以回答这里

下面是代码片段

代码语言:javascript
复制
 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) =>
                     {...}  
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 16:51:14

我建议您更改UI以使用TreeViewItem上的触发器来根据在TreeViewItem中定义的属性替换TreeViewItem。双击项时将此属性设置为true。当IsKeyboardFocusWithin变为false时,将其设置为false (您可以覆盖元数据并为此添加一个PropertyChangedCallback )。

就您的LostFocus问题而言,我怀疑您的问题是有多个焦点范围。

有关以"WPF方式“进行此操作的详细信息

以下是关于如何使用附加属性、触发器和模板来实现此操作的一些详细信息。

模板可以是简单的,也可以是您想要的复杂的。这里很简单:

代码语言:javascript
复制
<DataTemplate x:Key="NormalTemplate">
  <ContentPresenter />
</DataTemplate>

<DataTemplate x:Key="TextBoxTemplate">
  <TextBox Text="{Binding}" />
</DataTemplate>

以下是您的风格:

附加属性"ShowTextBox“可以使用"propa”片段在MyWindowClass中创建--只需键入"propa“并点击选项卡,然后填充空格。

要切换项目以显示文本框,只需:

代码语言:javascript
复制
SetShowTextBox(item, true);
To switch it back:

SetShowTextBox(item, false);

请尝试学习和投资于WPF的模式和实践,这样你就可以很容易地完成你想要达到的目标。

还有一些项目可以帮助您开始使用TreeViews来实现您想要实现的目标。

样本工程

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23017890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档