【发布时间】:2016-05-04 15:17:03
【问题描述】:
我有这个代码。 ListView 中的每个项目都包含 Label 和 CheckBox 元素。 Label 表示绑定的 LineSeries 项的标题,Checkbox 绑定到 LineSeries 项的 IsVisible 属性。
当 LineSeries 元素可见时,我希望触发器将 Background 属性(复选框 ControlTemplate 中的 Border 元素)设置为 LineSeries 元素的颜色。设置为 LightGray 颜色有效,更改 IsVisible 属性也有效,但 Border 的背景不会改变。
<ListView Name="MyListView" HorizontalAlignment="Left" Height="253" Margin="445,10,0,0" VerticalAlignment="Top" Width="72" ItemsSource="{Binding Path=Model.Series}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="2" Background="{Binding Color}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding IsVisible, Mode=TwoWay}">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Border Width="15" Height="15" BorderBrush="Gray" BorderThickness="2" CornerRadius="3" />
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="{Binding Color, Converter={StaticResource OxycolorToColorConverter}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</CheckBox.Style>
</CheckBox>
<Label Grid.Row="0" Grid.Column="1" Content="{Binding Title}" Padding="1" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
转换器:
[ValueConversion(typeof(OxyColor), typeof(Brush))]
class OxycolorToColor: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var ox = (OxyColor) value;
var color = Color.FromArgb(ox.A, ox.R, ox.G, ox.B);
var brush = new SolidColorBrush(color);
return brush;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return OxyColors.Purple;
}
}
【问题讨论】: