1

我有以下 rangeobservablecollection:

private readonly RangeObservableCollection<coll> _coll;

其中 coll 是我要添加到此集合中的一堆复选框。我想更改特定添加复选框的前景色,如下所示:

_coll.Add( info );

有没有办法改变它的颜色?

XAML 代码:

<StackPanel Orientation="Horizontal">
                <CheckBox Margin="0,0,3,0" Foreground="{Binding Foreground"}">
                    <CheckBox.IsChecked>
                        <Binding Path="IsSelected"
                                 Mode="TwoWay">
                            <Binding.RelativeSource>
                                <RelativeSource Mode="Parent" />
                            </Binding.RelativeSource>
                        </Binding>
                    </CheckBox.IsChecked>
                </CheckBox>
                <ContentPresenter />
            </StackPanel>
4

1 回答 1

4

您可以在 ui 对象上使用模板,将前景色绑定到 coll 类的 SolidColorBrush 属性。

<ListBox ItemsSource="{Binding items}">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
          <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" />
          <TextBlock Foreground="{Binding Foreground}" Content="{Binding Description}" />
        </StackPanel>
      </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

您的类定义将如下所示:

public class coll
{
    public IsChecked { get; set; }
    public string Description { get; set; }
    public SolidColorBrush Foreground { get; set; }
}

然后你可以改变前景:

info.Foreground = new SolidColorBrush(Colors.Red);
_coll.Add( info );

您可以在这里使用很多变体来实现相同的效果:转换器、INPC...

于 2012-11-19T16:28:27.530 回答