У меня есть граница внутри элемента 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>
Где я иду не так?
Это не имеет смысла, чтобы указать 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
.