将光标移到/点击文章中的句子上,可以查看译文。      显示繁体中文内容    显示简体中文内容

How to select the entire text when the focus is on the textbox, where in the textbox is in the column of GridView in wpf
如何在文本框中选择整个文本时,文本框中在wpf中的GridView列中

0 0

I have a ListView by default, but i will change the view to GridView when a button is clicked(I haven't included the button this is the sample code).in the GridView, for a column am creating datatemplate in which textbox is available.now when the focus is on textbox, i want the entire text to be selected.but that is not happening.


 <Window x:Class="WpfApplication1.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"
 xmlns:local="clr-namespace:WpfApplication1">
 <Window.Resources>

 <Style TargetType="{x:Type TextBox}"> 
 <Setter Property="BorderThickness" Value="0"/>
 <Style.Triggers>
 <Trigger Property="IsFocused" Value="True">
 <Setter Property="IsReadOnly" Value="False"/>
 </Trigger>
 <Trigger Property="IsFocused" Value="False">
 <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=Background}"/>
 <Setter Property="IsReadOnly" Value="True"/>
 </Trigger>
 <Trigger Property="IsReadOnly" Value="False">
 <Setter Property="Background" Value="White"/> 
 </Trigger>
 </Style.Triggers>
 </Style>

 <DataTemplate x:Key="DefaultTemplate">
 <StackPanel Orientation="Horizontal">
 <TextBlock Text="{Binding Name}"/>
 </StackPanel>
 </DataTemplate>

 <DataTemplate x:Key="EditableTemplate">
 <StackPanel Orientation="Horizontal">
 <TextBlock Text="{Binding Name}"/>
 </StackPanel>
 </DataTemplate>

 <Style x:Key="ListViewStyle" TargetType="{x:Type ListView}">
 <Setter Property="View">
 <Setter.Value>
 <GridView> 
 <GridViewColumn Header="Name" CellTemplate="{StaticResource DefaultTemplate}"/>
 <GridViewColumn Header="Age">
 <GridViewColumn.CellTemplate>
 <DataTemplate>
 <StackPanel Orientation="Horizontal">
 <TextBox Text="{Binding Age}" GotFocus="TextBox_GotFocus"/>
 </StackPanel>
 </DataTemplate>
 </GridViewColumn.CellTemplate>

 </GridViewColumn>

 </GridView>
 </Setter.Value>
 </Setter>
 </Style>

 </Window.Resources>
 <StackPanel> 
 <ListView x:Name="FoldersListView" Margin="3" SelectionMode="Single" ItemsSource="{Binding Path=ObjectCollection}" 
 IsSynchronizedWithCurrentItem="True" Style="{StaticResource ListViewStyle}">

 </ListView>
 </StackPanel>

</Window>

and here is the code behind :


 using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{

 public class ViewModelBase : INotifyPropertyChanged
 {
 public event PropertyChangedEventHandler PropertyChanged;
 public void RaisePropertyChanged(string propertyName)
 {
 if (null!= PropertyChanged)
 {
 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
 }
 }
 }

///<summary>
///Interaction logic for MainWindow.xaml
///</summary>
 public partial class MainWindow : Window
 {
 public testVM VM = new testVM();
 public MainWindow()
 {
 InitializeComponent();
 this.DataContext = VM;
 }

 private void TextBox_GotFocus(object sender, RoutedEventArgs e)
 { 
 (sender as TextBox).SelectAll(); 

 } 
 }

 public class testVM : ViewModelBase
 {
 List<emplyee> myProperty = new List<emplyee>();

 private string _title;
 public string Title
 {
 get { return _title; }
 set
 {
 _title = value;
 RaisePropertyChanged("Title");
 }
 }

 public testVM()
 {
 objectCollection.Add(new emplyee() { Name ="aaa India",Age="10" });
 objectCollection.Add(new emplyee() { Name ="bbb India",Age="20" });
 objectCollection.Add(new emplyee() { Name ="ccc India",Age="30" });
 objectCollection.Add(new emplyee() { Name ="ddd India",Age="40" });
 }

 public List<emplyee> MyProperty { get{return myProperty;} }

 private ObservableCollection<emplyee> objectCollection = new ObservableCollection<emplyee>();
 public ObservableCollection<emplyee> ObjectCollection
 {
 get
 {


 return objectCollection;
 }
 set
 {
 objectCollection = value;

 }
 }


 }

 public class emplyee
 {
 public emplyee()
 {

 }

 public string Name { get; set; }
 public string Age { get; set; }

 }
}

am i missing anything?? please suggest to thoughts...i have tried all the different ways.

时间: 原作者:

0 0

In your XAML, add this to styles,


<Style TargetType="{x:Type TextBox}">
 <EventSetter Event="UIElement.GotKeyboardFocus" Handler="TextBox_GotKeyboardFocus"/>
</Style>

And in your code behind,


private void TextBox_GotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
{
 ((TextBox)sender).SelectAll();
}

原作者:
...