Wpf 如何绑定到ItemContainerStyle的样式设置器中的特定项属性?

Wpf 如何绑定到ItemContainerStyle的样式设置器中的特定项属性?,wpf,xaml,Wpf,Xaml,我有一个问题,它并没有破坏我的代码中的任何东西,它只是导致了一系列令人讨厌的警告和花在解析绑定表达式上的时间。我想解决它 具体而言,以下是我收到的警告之一: System.Windows.Data错误:2:找不到治理框架元素 或目标元素的FrameworkContentElement。 BindingExpression:Path=Color;DataItem=null;目标元素是 “SolidColorBrush”;目标属性为“颜色”(类型为“颜色”) (我还有两个关于不透明度和DashSty

我有一个问题,它并没有破坏我的代码中的任何东西,它只是导致了一系列令人讨厌的警告和花在解析绑定表达式上的时间。我想解决它

具体而言,以下是我收到的警告之一:

System.Windows.Data错误:2:找不到治理框架元素 或目标元素的FrameworkContentElement。 BindingExpression:Path=Color;DataItem=null;目标元素是 “SolidColorBrush”;目标属性为“颜色”(类型为“颜色”)

(我还有两个关于不透明度和DashStyle的问题,但为了简洁起见,我还是用颜色来回答这个问题)

以下是相关代码:

<z:ClassWithMyItems ItemsSource="{Binding Items}">
   <z:ClassWithMyItems.ItemContainerStyle>
        <Style TargetType={"x:Type z:MyItem}">
            <Setter Property="Pen">
                <Setter.Value>
                    <Pen Thickness="2.0" options:Freeze="True" DashStyle="{Binding DashStyle}">
                        <Pen.Brush>
                            <SolidColorBrush Color={Binding Color, Converter={StaticResource ColorConverter}}" Opacity="{Binding Opacity}" />
                        </Pen.Brush>
                    </Pen>
                </Setter.Value>
            </Setter>
        </Style>
    </z:Feature.ItemContainerStyle>
</z:ClassWithMyItems>


按照@Clemens的建议,您可以使用一个返回
笔的转换器。只需绑定到
MyItem
对象本身:

public class PenConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        MyItem myItem = value as MyItem;
        if (myItem == null)
            return value;

        Pen pen = new Pen();
        pen.DashStyle = myItem.DashStyle;
        pen.Brush = myItem.Brush;
        //...
        pen.Freeze();
        return pen;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
XAML:

<Style TargetType="{x:Type z:MyItem}">
    <Style.Resources>
        <local:PenConverter x:Key="converter" />
    </Style.Resources>
    <Setter Property="Pen" Value="{Binding Path=., Converter={StaticResource converter}}" />
</Style>


您可以尝试使用一个绑定转换器来返回笔而不是颜色,并声明
。这是一个非常聪明的解决方案-唯一的问题是我实际上需要绑定三个属性:颜色、不透明度和DashStyle(我将编辑我的帖子)。我不确定你是否可以使用一个有3个绑定值的转换器…请发布一个。这样对你和其他任何人来说都容易得多。@CharlesB:绑定到对象本身,然后将值转换为转换器中的适当类型。这个解决方案有效,警告不再存在了-谢谢。我想我希望有一个绑定语法技巧,让笔查看上面的DataContext,但这也起到了作用。