在itemscontrol中使用wpf borderbrush绑定

时间:2015-04-07 12:33:06

标签: c# wpf binding border itemscontrol

我在ItemsControl中有一个Border,它需要从ItemsSource(一个Observable Collection)中名为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>

我哪里错了?

1 个答案:

答案 0 :(得分:1)

同时指定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