解析标记扩展时遇到类型为“MS.Internal.Markup.MarkupExtensionParser + UnknownMarkupExtension”的未知属性“Converter”

时间:2013-11-05 14:14:59

标签: c# converter

我将一个名为ScaleFactor的ObservableCollection绑定到一个ComboBox。 ObservableCollection的值只是1,2,4和8.我想使用IValueConverter将这些值更改为x1,x2,x4和x8。

我的MainWindow.xaml

<Window x:Class="TimeLineCanvas.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:timeline="clr-namespace:TimeLineCanvas.UserControls"
        xmlns:helper="clr-namespace:TimeLineCanvas.Helpers"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <helper:ZoomConverter x:Key="ZoomConverter" />
        </Grid.Resources>

        <StackPanel>    
            <ComboBox ItemsSource="{Binding SSS}" HorizontalAlignment="Left" >
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding, Converter={StaticResource ZoomConverter}}" />
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>
    </Grid>
</Window>

背后的代码

using System;
using System.Windows;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace TimeLineCanvas
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region Constructors

        public MainWindow()
        {
            InitializeComponent();

            SSS = new ObservableCollection<int>();
            SSS.Add(1);
            SSS.Add(2);
            this.DataContext = this;
        }

        #endregion    

        public ObservableCollection<int> SSS { get; set; }    
    }
}

转换器

using System;
using System.Windows.Data;

namespace TimeLineCanvas.Helpers
{
    public class ZoomConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return "x" + value.ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

我不知道为什么会这样,我没有使用MarkupExtensions所以我不认为this link helps。任何人都可以放弃任何光线吗?

1 个答案:

答案 0 :(得分:4)

请勿在{{1​​}}之后使用逗号。这样就可以调用Binding对象上的空构造函数。

Binding

应该是

{Binding, Converter={StaticResource ZoomConverter}}