【问题标题】:wpf borderbrush binding in itemscontrol项目控制中的wpf边框画笔绑定
【发布时间】:2015-04-07 12:33:06
【问题描述】:

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

我哪里出错了?

【问题讨论】:

    标签: c# wpf binding border itemscontrol


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多