如果我的DataGrid. 我試過IValueConverter,但不能真正讓它作業。只有當我已經知道DataGrid. 這是我的 XAML。綠色是我可以使用它下面的代碼的顏色。我試圖將它與IValueConverter.
<DataGrid x:Name="dg_ProductlistGrid" ItemsSource="{Binding ProductCollection}" AutoGenerateColumns="False" IsReadOnly="True" Loaded="form1_load">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="1,1,1,1"/>
<Setter Property="Padding" Value="30,9,12,6"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="ProduktID" Binding="{Binding Path=factProduct.ProductId}" Width="*" IsReadOnly="True"/>
<DataGridTextColumn Header="Navn" Binding="{Binding Path= factProduct.Name}" Width="*" IsReadOnly="True"/>
<DataGridTextColumn Header="M?ngde" Binding="{Binding Path =QauntityNeeded }" Width="*" IsReadOnly="True"/>
<DataGridTextColumn Header="Rigtige M?ngde" Binding="{Binding Path =FoundQauntity }" Width="*" IsReadOnly="True"/>
<DataGridTextColumn Header="Mangel" Binding="{Binding Path = Missing}" Width="*" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Background" Value="LightGreen"/>
</Trigger>
<Trigger Property="Text" >
<Setter Property="Background" Value="{Binding Path=Missing, Converter={StaticResource converter}}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
這是我的IValueConverter:
public class Greaterthan : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int input = (int)value;
if (input < 1)
{
return new SolidColorBrush(Colors.Red);
}
else
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我該如何解決這個問題?
uj5u.com熱心網友回復:
在您的情況下,最好將完整的邏輯移動到轉換器中選擇顏色。然后,您應該洗掉所有觸發器并DataGridCell.Background直接系結到 的當前值Missing。您也可以使用DataGridTextColumn.CellStyle代替EditStyle.
<DataGrid>
<DataGrid.Resources>
<IntegerToBrushConverter x:Key="IntegerToBrushConverter" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Missing}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background"
Value="{Binding Missing, Converter={StaticResource IntegerToBrushConverter}}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid>
IntegerToBrushConverter.cs
class IntegerToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value)
{
case int numericValue when numericValue == 0: return Brushes.LightGreen;
case int numericValue when numericValue > 0: return Brushes.Red;
case int numericValue when numericValue > 1 && numericValue < 5: return Brushes.Blue;
default: return Brushes.Yellow;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
=> throw new NotSupportedException();
}
uj5u.com熱心網友回復:
您的轉換器不會檢查該值是否大于零,而是檢查它是否小于一。您可以簡化轉換器并同時使其功能更強大。期望大于值作為轉換器的引數。盡管您可以int在 XAML 中將an 指定為引數,但將值指定為 a 更具可讀性string,如下面使用轉換器時將介紹的那樣。此轉換器將string值和引數決議為 ,int并回傳值是否大于引數為bool。
public class GreaterThanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is string valueText) ||
!(parameter is string parameterText) ||
!int.TryParse(valueText, out var intValue) ||
!int.TryParse(parameterText, out var intParameter))
return Binding.DoNothing;
return intValue > intParameter;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在 XAML 中,您可以將 aDataTrigger與Text使用轉換器的系結一起使用。如果轉換器回傳true(意味著值大于引數),則設定特定顏色。
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="0">
<Setter Property="Background" Value="LightGreen"/>
</Trigger>
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}, Converter={StaticResource GreaterThanConverter}, ConverterParameter=0}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
確保在任何資源字典中實體化轉換器,例如在 上DataGrid,否則您將收到資源無法決議的錯誤。
<DataGrid>
<DataGrid.Resources>
<local:GreaterThanConverter x:Key="GreaterThanConverter"/>
</DataGrid.Resources>
<!-- ...other markup. -->
</DataGrid>
還要確保您local在 XAML 檔案中定義了命名空間。
xmlns:local="clr-namespace:MyWpfApp.MyNamespace"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313976.html
上一篇:如何實作嵌入影像資源的系結?
