选择并突出显示在datatemplate中定义的文本框中的文本

时间:2014-03-09 09:43:39

标签: c# wpf textbox datatemplate

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

由于

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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; }
    }
}

答案 1 :(得分:0)

使用按钮上的附加属性设置可能会很好,并且在附加的代码中使用类似cvraman编写的代码。 使用这种方式,您绝对可以避免代码隐藏结构,以及使用mvvm

的更好方法