gpt4 book ai didi

c# - WPF Lostfocus 无法正确触发 vs2010 treeviewitem

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:21 25 4
gpt4 key购买 nike

我有一个嵌套的 TreeView,我在其中绑定(bind)了每个项目的双击事件,以便将节点的文本更改为可编辑的文本框。然后我使用 lostFocus 事件处理程序删除文本框并恢复文本。

  void treeViewItemWithMenu_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (selected == e.Source)
{
TextBox tb = new TextBox();
tb.Text = this.Header.ToString();
tb.Focus();
tb.LostFocus += new RoutedEventHandler(tb_LostFocus);
this.Header = tb;
var a = e.OriginalSource;
e.Handled = true;
}
}


void tb_LostFocus(object sender, RoutedEventArgs e)
{
this.Header = ((TextBox)(this.Header)).Text;
}

不幸的是,lostFocus 事件似乎没有正常工作。当我在文本框外单击时,它根本不会触发。我什至可以双击另一个节点,它进入编辑模式(即变成一个文本框),而第一个文本框似乎仍然有焦点。失去焦点不会触发,直到我开始在两个文本框之间来回移动。

我正在使用 vs2010 rc,项目设置为 .net 3.5。

最佳答案

我的天啊!请原谅我这么说,但每个阅读过您的问题的普通 WPF 用户可能都会遗憾地摇头。我们为您感到难过,因为您还没有学习真正的“WPF 之禅”,即利用数据绑定(bind)、模板和触发器使您的 UI 动态化,而不是采用老式的方式。 WPF 之所以漂亮,就是因为有这种能力。它还使事情变得“1000%”更容易。

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

就您的 LostFocus 问题而言,我怀疑您的问题是您有多个焦点范围或者它是 RC 中的错误。没有看到您的 XAML,我不能说更多。

有关以“WPF 方式”执行此操作的其他详细信息

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

您的模板可以根据需要简单或复杂。很简单:

<DataTemplate x:Key="NormalTemplate">
<ContentPresenter />
</DataTemplate>

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

这是您的风格:

<Style TargetType="TreeViewItem">
<Setter Property="HeaderTemplate" Value="{StaticResource NormalTemplate}" />
<Trigger Property="local:MyWindowClass.ShowTextBox" Value="true">
<Setter Property="HeaderTemplate" Value="{StaticResource TextBoxTemplate}" />
</Trigger>
</Style>

可以使用“propa”片段在 MyWindowClass 中创建附加属性“ShowTextBox”——只需键入“propa”并点击 Tab,然后填写空白。

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

SetShowTextBox(item, true);

要切换回来:

SetShowTextBox(item, false);

希望对您有所帮助。

关于c# - WPF Lostfocus 无法正确触发 vs2010 treeviewitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com