itemscontrol 中的 wpf borderbrush 绑定

wpf borderbrush binding in itemscontrol

我在 ItemsControl 中有一个 Border,它需要从 ItemsSource(一个 Observable 集合)中名为 BorderColor 的字段中获取它的 BorderBrush。

<ItemsControl ItemsSource="{Binding ObsColOfThings}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Border BorderThickness="3" BorderBrush="{Binding BorderColor}">
                            <ContentPresenter Content="{Binding}" />
                        </Border>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border >
                <TextBlock Text="{Binding Text}" />
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

绑定有效,但边框刷无效。

我也试过了,尽管文本工作正常,但它也不起作用

<ItemsControl ItemsSource="{Binding Appointments}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="{Binding BorderColor" BorderThickness="3">
                <TextBlock Text="{Binding AppointmentDescription}" />
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我哪里错了?

同时指定 ItemsControl 的 ItemTemplate 和 ContentPresenter 的 ContentTemplate 没有意义,因为 ItemTemplate 有效地替代了 ContentTemplate。

放下整个 ItemContainerStyle 并像这样编写您的 ItemsControl:

<ItemsControl ItemsSource="{Binding ObsColOfThings}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="3" BorderBrush="{Binding BorderColor}">
                <TextBlock Text="{Binding Text}" />
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

BorderColor 属性 的类型应该是 Brush:

public class Item
{
    public string Text { get; set; }
    public Brush BorderColor { get; set; }
}

然后当然应该叫BorderBrush,而不是BorderColor