J'ai un fichier de données WPF reliée à certaines propriétés de mon point de vue lorsque ma fenêtre charge et le datagramrid aussi, je définis aussi le Comment puis-je définir / déclencher la surbrillance du edit: strong> < / P> Il est effectivement sélectionné car j'ai la petite cellule de sélection. C'est juste le rendu de la surbrillance qui ne déclenche pas. P> <> < / p> p> SELECTELITEM CODE> et il se lie bien. Mais la rangée n'est pas mise en évidence. Au moment où je clique sur une ligne, la ligne en surbrillance et le problème est résolu. p>
SELECTELTEMITEM code> dans le Datagramrid sur la charge / l'initialisation? p>
5 Réponses :
Lorsque vous utilisez un modèle en tant que modèle DataContext pour une fenêtre WPF, l'événement Dans l'événement chargé de la fenêtre ou l'événement chargé de la fenêtre, réinitialisez la liaison sélectionnée SELECTEMEM: P> CODE> CORETCHANGED BLOPLANGED CORE> NE PAS appelé qu'après la charge de la fenêtre, c'est pourquoi la ligne n'est jamais mise en surbrillance et vous ne voyez que le première rangée avec le point culminant partiel. Il peut y avoir une manière plus élégante, mais voici une œuvre de travail.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
namespace WpfDataGridHighlightOnLoad
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler( OnLoaded );
}
// could also be placed in the DataGrid's loaded event handler
private void OnLoaded( object sender, RoutedEventArgs e )
{
if( dataGrid != null && Model.SelectedItem != null )
{
var selected = Model.SelectedItem;
Model.SelectedItem = null;
Model.SelectedItem = selected;
}
}
private void OnCycleClick( object sender, RoutedEventArgs e )
{
int index = Model.ItemList.IndexOf( Model.SelectedItem );
index = index == Model.ItemList.Count - 1 ? 0 : index + 1;
Model.SelectedItem = Model.ItemList[index];
}
private void OnResetClick( object sender, RoutedEventArgs e )
{
Model.Reset();
}
}
public class MainWindowModel : INotifyPropertyChanged
{
public MainWindowModel()
{
Reset();
}
public void Reset()
{
ItemList = new List<Person>
{
new Person("Joe", 20),
new Person("John", 30),
new Person("Jane", 40),
new Person("Jill", 50),
new Person("Fido", 7),
};
SelectedItem = ItemList[2];
}
private Person _selectedItem;
public Person SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
NotifyPropertyChanged( "SelectedItem" );
}
}
private List<Person> _itemList;
public List<Person> ItemList
{
get { return _itemList; }
set
{
_itemList = value;
NotifyPropertyChanged( "ItemList" );
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged( String info )
{
if( PropertyChanged != null )
{
PropertyChanged( this, new PropertyChangedEventArgs( info ) );
}
}
#endregion
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person( string name, int age )
{
Name = name;
Age = age;
}
public override string ToString()
{
return Name;
}
}
}
Il n'y a pas de chargé code> événement sur
uielement code>
DataGrid CODE> Hérités de
Contrôles Code> Qui a un événement code> chargé CODE>: MSDN DataGrid Events
@Smurf - Réinitialiser SeceeTeTem a résolu un problème que j'ai essayé de comprendre pendant quelques jours. Merci!!!
Cela fonctionne la première fois sur le chargement. Mais lorsque je change la valeur de viewModel, cela ne souligne toujours pas la bonne ligne. bien que ce soit sélectionné.
J'ai eu le même "problème" et j'ai finalement trouvé une très bonne solution au problème. Comme vous l'avez déjà dit, ce n'est pas si la ligne n'est pas sélectionnée mais qu'elle ne met pas en évidence la ligne. Si vous regardez soigneusement, vous remarquerez que lorsque vous cliquez sur n'importe où dans la ligne (à l'aide de la souris), il ne met toujours pas en surbrillance la ligne, seules les cellules à l'intérieur.
donc 2 options; p>
Pour ce faire, ajoutez quelque chose comme celui-ci au Datagramrid dans le fichier XAML: p> espère que cela aide! P> Acclamations,
Ltb p> p>
Ceci est un peu ancien, mais aucune des réponses dans n'importe quel post ne semble l'obtenir tout à fait raison. Ce que vous voulez, c'est que cela fonctionne comme il était censé fonctionner: c'est-à-dire que la mise en évidence est la même chose si le contrôle a déjà été concentré (ce qui semble être quelque chose d'accessoire).
Ceci peut être fait avec un DataGridrow Code> Style, mais l'astuce ne veut pas spécifier les couleurs vous-même, mais pour utiliser les couleurs par défaut, tout fonctionne simplement. Une gêne supplémentaire vient du fait que ce sont les cellules qui sont en surbrillance, pas les lignes, donc vous avez essentiellement besoin de dupliquer le style de surbrillance de la cellule: P>
<Style
x:Key="DataGridRowStyle"
TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="IsKeyboardFocusWithin"
Value="False" />
<Condition
Property="IsSelected"
Value="True" />
</MultiTrigger.Conditions>
<Setter
Property="Background"
Value="{DynamicResource
{x:Static SystemColors.InactiveSelectionHighlightBrushKey}}" />
<Setter
Property="Foreground"
Value="{DynamicResource
{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="IsKeyboardFocusWithin"
Value="True" />
<Condition
Property="IsSelected"
Value="True" />
</MultiTrigger.Conditions>
<Setter
Property="Background"
Value="{DynamicResource
{x:Static SystemColors.HighlightBrushKey}}" />
<Setter
Property="Foreground"
Value="{DynamicResource
{x:Static SystemColors.HighlightTextBrushKey}}" />
</MultiTrigger>
</Style.Triggers>
</Style>
a couru sur le même problème, lors de l'insertion de données factices dans un DataGrid WPF, puis essayez de modifier la commande de ligne. La rangée Hightlighting est classée (image ci-dessous).
cause insertion de l'objet "même" d'enregistrement exact plusieurs fois. P>
Je sais que ce fil est super vieux, mais aucune des solutions m'a aidé.
Si quelqu'un a le même problème, une solution très simple que j'ai trouvée était de définir simplement la mise au point sur le DataGrid avant de définir son élément choisi sur la charge. p>