wpf пограничная привязка в itemscontrol

1

У меня есть граница внутри элемента ItemsControl, которая должна получить BorderBrush из поля BorderColor в ItemsSource (Observable Collection).

<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>

Где я иду не так?

Теги:
wpf
binding
itemscontrol
border

1 ответ

1
Лучший ответ

Это не имеет смысла, чтобы указать ItemTemplate и ContentPresenter ContentTemplate в качестве ItemsControl в то же самое время, потому что ItemTemplate эффективно заменяет ContentTemplate.

Отбросьте весь ItemContainerStyle и напишите свой 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню