gpt4 book ai didi

c# - 使用数据模板 (WPF) 在列表框中内联编辑 TextBlock

转载 作者:太空狗 更新时间:2023-10-29 17:28:53 25 4
gpt4 key购买 nike

使用 WPF,我有一个 ListBox 控件,里面有一个 DataTemplate。相关XAML代码如下所示:

<ListBox Name="_todoList" Grid.Row="1" BorderThickness="2"
Drop="todoList_Drop" AllowDrop="True"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
AlternationCount="2">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" Checked="CheckBox_Check" />
<TextBlock Name="descriptionBlock"
Grid.Column="1"
Text="{Binding Description}"
Cursor="Hand" FontSize="14"
ToolTip="{Binding Description}"
MouseDown="TextBlock_MouseDown" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

我想做的是让 TextBlock 响应(双击)点击,将其变成 TextBox。然后用户可以编辑描述,然后按回车键或更改焦点以进行更改。

我尝试在与 TextBlock 相同的位置添加一个 TextBox 元素并使其可见性 Collapsed,但我不知道如何导航到右侧 TextBox 当用户点击一个 TextBlock 时。也就是说,我知道用户点击了某个 TextBlock,现在我要显示哪个 TextBox

任何帮助将不胜感激,

-Ko9

最佳答案

我在这些情况下所做的是使用 XAML 层次结构来确定要显示/隐藏的元素。类似的东西:

<Grid>
<TextBlock MouseDown="txtblk_MouseDown" />
<TextBox LostFocus="txtbox_LostFocus" Visibility="Collapsed" />
</Grid>

使用代码:

protected void txtblk_MouseDown(object sender, MouseButtonEventArgs e)
{
TextBox txt = (TextBox)((Grid)((TextBlock)sender).Parent).Children[1];
txt.Visibility = Visibility.Visible;
((TextBlock)sender).Visibility = Visibility.Collapsed;
}

protected void txtbox_LostFocus(object sender, RoutedEventArgs e)
{
TextBlock tb = (TextBlock)((Grid)((TextBox)sender).Parent).Children[0];
tb.Text = ((TextBox)sender).Text;
tb.Visibility = Visibility.Visible;
((TextBox)sender).Visibility = Visibility.Collapsed;
}

我总是把像这样的我要重用的东西变成一个 UserControl,我可以向它添加额外的错误处理,并保证 Grid 只会包含两个项目,它们的顺序永远不会改变。

编辑:此外,将其转换为 UserControl 允许您为每个实例化创建一个 Text 属性,这样您就可以为每个实例化命名并直接引用文本,而无需通过 ((TextBox)myGrid.Children[1]).Text 类型转换。这将使您的代码更加高效和干净。如果将其变成 UserControl,您还可以命名 TextBlockTextBox 元素,因此根本不需要强制转换。

关于c# - 使用数据模板 (WPF) 在列表框中内联编辑 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088909/

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