如果輸入的值超出范圍,我想更改資料網格中單元格的顏色。要編輯的列是“Value1”。怎么做最好?提前致謝。xml:
<TreeViewItem TreeViewItem.Expanded="TreeViewItem1_Expanded" TreeViewItem.Collapsed=" TreeViewItem1_Collapsed" x:Name="Parametertreeviewitem1" Header="Motor Data" VerticalContentAlignment="Center" FontFamily="Segoe UI" RenderTransformOrigin="0.5,0.5" FontSize="16" Width="896" HorizontalAlignment="Left" HorizontalContentAlignment="Center" >
<DataGrid x:Name="Data_grid1" Height="520" Margin="0,5,0,-25" VerticalAlignment="Top" Width="1150" AutoGenerateColumns="False" SelectionMode="Single" CellEditEnding="CellEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Header="Display" Width="100" Binding="{Binding Display1}" IsReadOnly="True"/>
<DataGridTextColumn Header="Parameter" Width="250" Binding="{Binding Parameter1}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Range1}" Header="Range" Width="200" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Value1, ValidatesOnExceptions=True}" Header="Drive value" Width="150"/>
<DataGridTextColumn Binding="{Binding File_Value1}" Header="File value" Width="150" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</TreeViewItem>
CS:
private void CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
para_num = (byte)Data_grid.SelectedIndex;
var editedTex = e.EditingElement as TextBox;
if ((Current_grp[para_num].Min_value <= (Convert.ToDecimal(editedTex.Text)) * Current_grp[para_num].Scale) && (Convert.ToDecimal(editedTex.Text) * Current_grp[para_num].Scale <= Current_grp[para_num].Max_value))
{
// This code runs if edit is valid.
// above condition checks whether parameter is in proper range.
}
uj5u.com熱心網友回復:
您可以直接設定Background:DataGridCell
private void CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
var editedTex = e.EditingElement as TextBox;
...
DataGridCell cell = FindParent<DataGridCell>(editedTex);
cell.Background = Brushes.Silver;
}
private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(dependencyObject);
if (parent == null)
return null;
return parent as T ?? FindParent<T>(parent);
}
只要單元沒有被虛擬化,這種方法就可以作業。
更強大的解決方案是使用 aCellStyle系結到您在值溢位時設定的屬性:
<DataGridTextColumn Binding="{Binding Value1, ValidatesOnExceptions=True}" Header="Drive value" Width="150">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Overflows}" Value="True">
<Setter Property="Background" Value="Silver" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
該屬性應添加到Value1在事件處理程式中定義和設定屬性的類中:
private void CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
var editedTex = e.EditingElement as TextBox;
var dataObj = editedTex.DataContext as YourClass;
...
dataObj.Overflows = true;
}
確保該類實作了該INotifyPropertyChanged介面并引發了該屬性的PropertyChanged事件。Overflows
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/425998.html
