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
。
我在 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
。