所以我试图绑定一个控件的背景。一切正常,但根据我看到的项目的最新规格,我需要根据两个值更改背景颜色。 第二个值应该是标签的内容,它指示要使用的颜色。
目前使用的转换器是电池电池(myConverter)
要绑定的元素是Gridview中单元格的背景颜色。
xaml代码如下所示:
<DataGrid
Background="Transparent"
ItemsSource="{Binding Source={StaticResource Properties}, Path=TableData}"
AutoGenerateColumns="False"
IsReadOnly="True"
Name="Datatable"
VerticalScrollBarVisibility="Visible"
BorderThickness="0"
>
<DataGrid.Resources>
<Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
<Style TargetType="ScrollBar">
<Setter Property="Width" Value="15" />
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>
</Style>
</DataGrid.Resources>
<DataGrid.Columns >
<DataGridTextColumn Width="90" Header="ID" Binding="{Binding ID}"
>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{Binding ID, Converter={StaticResource myIDConverter}}"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="90" Header="Batterie" Binding="{Binding Battery}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding Battery, Converter={StaticResource myConverter}}"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="90" Header="Current Use" Binding="{Binding CurrentUse}"></DataGridTextColumn>
<DataGridTextColumn Width="90" Header="Occupancy" Binding="{Binding Occupancy}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding Occupancy, Converter={StaticResource myConverter}}"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
转换器的代码如下所示:
public class BatteryConverter : IValueConverter, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String name)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
SolidColorBrush clr;
if (int.Parse(value.ToString()) >= 80)
clr = new SolidColorBrush(Colors.Green);
else if (int.Parse(value.ToString()) >= 40)
clr = new SolidColorBrush(Colors.Orange);
else if (int.Parse(value.ToString()) >= 0)
clr = new SolidColorBrush(Colors.Red);
else
clr = new SolidColorBrush(Colors.White);
return clr;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
答案 0 :(得分:0)
我建议使用MVVM-Pattern,这样可以使WPF中的所有内容更简单,更清晰:) 无论如何,这种情况会非常简单。
我实际上不在我的Dev.Pc,所以我不能给你最后的来源, 但在你的情况下,你最好使用样式触发器,如=&gt; MultiTrigger / MultidataTrigger ....
如果标签内容可用作属性,则应使用MultiDataTrigger,然后您不需要使用转换器。 - &GT;你可以简单地为每个结果使用multipleDataTriggers。
希望这个答案对你有所帮助。应该很容易谷歌如何实现这种风格的触发器。如果没有让我知道,我会在我的开发电脑上给你一些示例代码
格尔茨