选择并突出显示在数据模板中定义的文本框中的文本

本文关键字:文本 定义 数据 显示 选择 | 更新日期: 2023-09-27 17:49:18

这是我的场景:我的ListView的DataTemplate包含一个文本框和一些按钮,其中一个按钮用于选择并突出显示文本框中的所有文本。我可以从后面的代码中找到许多解决方案来选择和突出显示文本框中的文本,但它们都没有定义DataTemplate中的文本框和按钮。有人能帮忙吗?

谢谢

选择并突出显示在数据模板中定义的文本框中的文本

你可以这样做:

XAML:

<Window x:Class="SOWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ListView Width="200" Height="300" ItemsSource="{Binding FriendList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBox Width="100" Margin="2" Text="{Binding Name}"></TextBox>
                    <Button Content="Select" Click="Button_Click"></Button>
                    <Button Content="Delete"></Button>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

代码隐藏:

using System.Windows;
using System.Windows.Controls;
namespace SOWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var friendViewModel = new FriendViewModel();
            friendViewModel.AddFriends();
            this.DataContext = friendViewModel;
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var parent = (StackPanel)((sender as Button).Parent);
            var children = parent.Children;
            foreach(var child in children)
            {
                if (child.GetType().Equals(typeof(TextBox)))
                {
                    var tb = child as TextBox;
                    tb.Focus();
                    tb.SelectAll();
                    break;
                }
            }
        }
    }
}

ViewModel:

using System.Collections.ObjectModel;
namespace SOWPF
{
    public class FriendViewModel
    {
        public ObservableCollection<Friend> FriendList 
        { get; set; }
        public void AddFriends()
        {
            FriendList = new ObservableCollection<Friend>();
            FriendList.Add(new Friend() { Name = "Arpan" });
            FriendList.Add(new Friend() { Name = "Nrup" });
            FriendList.Add(new Friend() { Name = "Deba" });
        }
    }
    public class Friend
    {
        public string Name { get; set; }
    }
}

可能会是一个很好的使用附加属性设置在按钮上,并在附加的代码中使用代码,如由cvraman编写的。使用这种方式绝对避免了代码背后的结构,并且更好地使用mvvm