Xaml Windows 8 ContentProperty不工作

Xaml Windows 8 ContentProperty不工作,xaml,c#-4.0,windows-8,winrt-xaml,Xaml,C# 4.0,Windows 8,Winrt Xaml,我在我的一个类上设置了ContentProperty,但当我在XAML中编码时,它会生成一个XAMLParseException。我想知道是否有人能给我建议我能做什么 代码隐藏: [ContentProperty(Name="Converters")] class ChainedValueConverter: DependencyObject, IValueConverter { public static readonly DependencyProperty ConvertersPr

我在我的一个类上设置了ContentProperty,但当我在XAML中编码时,它会生成一个XAMLParseException。我想知道是否有人能给我建议我能做什么

代码隐藏:

[ContentProperty(Name="Converters")]
class ChainedValueConverter: DependencyObject, IValueConverter
{
    public static readonly DependencyProperty ConvertersProperty = DependencyProperty.Register("Converters", typeof(ObservableCollection<IValueConverter>), typeof(ChainedValueConverter), null);

    public ChainedValueConverter()
    {
        SetValue(ConvertersProperty, new ObservableCollection<IValueConverter>());
    }

    public ObservableCollection<IValueConverter> Converters
    {
        get
        {
            return (ObservableCollection<IValueConverter>)GetValue(ConvertersProperty);
        }
    }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        object _cValue = value;
        foreach (IValueConverter converter in Converters)
        {
            _cValue = converter.Convert(_cValue, targetType, parameter, language);
            if (_cValue == DependencyProperty.UnsetValue)
                break;
        }
        return _cValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        object _cValue = value;
        foreach (IValueConverter converter in Converters)
        {
            _cValue = converter.ConvertBack(_cValue, targetType, parameter, language);
            if (_cValue == DependencyProperty.UnsetValue)
                break;
        }
        return _cValue;
    }
}
/// <summary>
/// Converts boolean value to visibility.
/// </summary>
class BooleanToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (Boolean)value ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (Visibility)value == Visibility.Visible ? true : false;
    }
}
[ContentProperty(Name=“Converters”)]
类ChainedValueConverter:DependencyObject,IValueConverter
{
public static readonly dependencProperty Converters property=dependencProperty.Register(“转换器”、typeof(observeCollection)、typeof(ChainedValueConverter)、null);
public ChainedValueConverter()
{
SetValue(ConvertersProperty,新的ObservableCollection());
}
公共可观测采集转换器
{
收到
{
返回(ObservableCollection)GetValue(ConvertersProperty);
}
}
公共对象转换(对象值、类型targetType、对象参数、字符串语言)
{
对象_cValue=值;
foreach(变频器中的变频器)
{
_cValue=converter.Convert(_cValue,targetType,参数,语言);
if(_cValue==DependencyProperty.UnsetValue)
打破
}
返回值;
}
公共对象转换回(对象值、类型targetType、对象参数、字符串语言)
{
对象_cValue=值;
foreach(变频器中的变频器)
{
_cValue=converter.ConvertBack(_cValue,targetType,参数,语言);
if(_cValue==DependencyProperty.UnsetValue)
打破
}
返回值;
}
}
/// 
///将布尔值转换为可见性。
/// 
类BooleanToVisibilityConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、字符串语言)
{
返回(布尔)值?可见性。可见:可见性。折叠;
}
公共对象转换回(对象值、类型targetType、对象参数、字符串语言)
{
return(Visibility)value==Visibility.Visible?true:false;
}
}
XAML:



上面的代码在运行时会生成一个包含WinRT信息的XamlParseException:E_UNKNOWN_ERROR

我非常喜欢您关于链式转换器的想法,并试图找到解决方案。似乎您只需要在构造函数中初始化集合(创建一个新实例)。请参见我的实施:

[ContentProperty(Name = "Converters")]
public class ChainedConverter : DependencyObject, IValueConverter
{
    public ChainedConverter()
    {
        Converters = new ObservableCollection<IValueConverter>();
    }

    public static readonly DependencyProperty ConvertersProperty =
        DependencyProperty.Register("Converters", typeof (ObservableCollection<IValueConverter>), 
        typeof (ChainedConverter), new PropertyMetadata(default(ObservableCollection<IValueConverter>)));

    public ObservableCollection<IValueConverter> Converters
    {
        get { return (ObservableCollection<IValueConverter>) GetValue(ConvertersProperty); }
        set { SetValue(ConvertersProperty, value); }
    }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.Convert(value, targetType, parameter, language);
        return value; 
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.ConvertBack(value, targetType, parameter, language);
        return value; 
    }
}
[ContentProperty(Name=“Converters”)]
公共类ChainedConverter:DependencyObject,IValueConverter
{
公共链转换器()
{
转换器=新的ObservableCollection();
}
公共静态只读DependencyProperty ConvertersProperty=
从属属性寄存器(“转换器”,类型(可观察采集),
typeof(ChainedConverter),新属性元数据(默认值(ObservableCollection));
公共可观测采集转换器
{
get{return(ObservableCollection)GetValue(ConvertersProperty);}
set{SetValue(ConvertersProperty,value);}
}
公共对象转换(对象值、类型targetType、对象参数、字符串语言)
{
foreach(转换器中的var c)
value=c.Convert(值、目标类型、参数、语言);
返回值;
}
公共对象转换回(对象值、类型targetType、对象参数、字符串语言)
{
foreach(转换器中的var c)
value=c.ConvertBack(值、目标类型、参数、语言);
返回值;
}
}

是否有可能调用Convert和ConvertTo方法,这是您看到的异常情况?BooleantVisibilityConverter类在哪里?@gyurisc Hi,我没有调用任何方法,而且肯定没有,因为我还没有将任何方法用于数据绑定。并编辑了上面的帖子,包括BooleanToVisisbilityConverter:dWhat work wonder tho'我只是想知道构造函数是如何影响结果的:P无论如何,你的代码工作得非常好,但当我刚刚将名称更改为ChainedValueConverter时,它只是中断了o'很好,但thx无论如何:)你必须更改dependendy中的名称属性定义以及。。。(XAML解析器尝试将元素添加到
转换器
属性,但这会引发异常,因为该属性为
null
。这就是您必须手动创建列表的原因)哦,因为根据我的代码,有一个属性元数据,所以我认为它将正确初始化,因为我放置了新的PropertyMetadata(new ObservaleCollection())您好,您能帮我看看我编辑的上述代码吗?我将其修改为与您提供的代码类似,但不起作用。您知道原因吗?请尝试使用
new PropertyMetadata(默认值(ObservaleCollection))
而不是
ConvertersProperty=DependencyProperty…
[ContentProperty(Name = "Converters")]
public class ChainedConverter : DependencyObject, IValueConverter
{
    public ChainedConverter()
    {
        Converters = new ObservableCollection<IValueConverter>();
    }

    public static readonly DependencyProperty ConvertersProperty =
        DependencyProperty.Register("Converters", typeof (ObservableCollection<IValueConverter>), 
        typeof (ChainedConverter), new PropertyMetadata(default(ObservableCollection<IValueConverter>)));

    public ObservableCollection<IValueConverter> Converters
    {
        get { return (ObservableCollection<IValueConverter>) GetValue(ConvertersProperty); }
        set { SetValue(ConvertersProperty, value); }
    }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.Convert(value, targetType, parameter, language);
        return value; 
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.ConvertBack(value, targetType, parameter, language);
        return value; 
    }
}