gpt4 book ai didi

wpf - 双击时可编辑的 WPF TreeView 项? (有风格?)

转载 作者:行者123 更新时间:2023-12-04 06:01:40 27 4
gpt4 key购买 nike

我有点像 WPF 菜鸟,因此对这个问题中的任何固有愚蠢深表歉意(!)

我正在尝试通过双击启用对 WPF 树 View 标签的编辑 - 我已经搜索了这个,看起来有两种方法是使用自定义控件或隐藏文本框/文本块之一的样式。

使用样式将标签设置为基于 DataTrigger 的 textBox 似乎很容易(例如下面的 1),但这意味着任何时候选择一行,它就是“正在编辑”。

我真正想做的是在 mousedoubleclick 事件上启用此功能(Transition to textbox),但似乎 EventTriggers 不能以下面的方式使用,因为它们是 transient 的。 (似乎我不能简单地在代码隐藏中使用 DoubleClick 事件,因为这不允许(??)让我影响显示的控件以显示/隐藏文本框)。

使用完整的自定义控件似乎是另一种选择 - 这里有一个 AAALMOST 工作示例( http://www.codeproject.com/KB/WPF/editabletextblock.aspx ),但是它在存在 HierachicalDataTemplate 子句的情况下不起作用(并且看起来似乎没有解决方案)。

(例如 1 - 选中时从文本块切换到文本框)

<Window x:Class="treetest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:treetest"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style x:Key="EditableContentControl" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:CompositeViewModel}">
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected,RelativeSource=RelativeSource AncestorType={x:Type TreeViewItem}}}"
Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type local:CompositeViewModel}">
<TextBox Text="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TreeView Margin="12,12,115,12" Name="treeView1"
ItemsSource="{Binding Path=GetRootData}"
>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:CompositeViewModel}" ItemsSource="{Binding Path=Children}">
<ContentControl Content="{Binding}" Style="{StaticResource EditableContentControl}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>

最佳答案

它有帮助吗:

        string name = "some name";
var treeItem = new TreeViewItem()
{
Header = name,
};
var textBox = new TextBox()
{
Text = name,
};
treeItem.MouseDoubleClick += (o, e) =>
{
TreeItem.Header = textBox;
};
textBox.LostFocus += (o, e) =>
{
treeItem.Header = textBox.Text;
name = textBox.Text;
};

它很简单,对我来说很好用。

关于wpf - 双击时可编辑的 WPF TreeView 项? (有风格?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715877/

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