【问题标题】:Unknown property 'Converter' for type 'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension' encountered while parsing a Markup Extension解析标记扩展时遇到类型“MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension”的未知属性“转换器”
【发布时间】:2013-11-05 22:52:02
【问题描述】:

我将一个名为 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。任何人都可以提供任何启示吗?

【问题讨论】:

  • 您绑定到ScaleFactor,这意味着这是单数。是 IEnumerable 类型的吗?
  • 我更新了我的评论,但我正在使用 public ObservableCollection ScaleFactor { get;放; } - 总是有 4 个项目
  • 我看不出你所拥有的有什么问题。尝试做...{Binding ., Converter(点然后是逗号)
  • @gleng,谢谢,但是,同样的问题仍然存在。
  • 呸,我唯一可能看到的错误是转换器未在 ComboBox 的范围内定义(很难通过您发布的代码的对齐方式来判断)。可能想在 中定义它,看看是否有任何改变。

标签: c# converter


【解决方案1】:

不要在Binding 之后使用逗号。这样你就可以在 Binding 对象上调用空构造函数。

{Binding, Converter={StaticResource ZoomConverter}}

应该是

{Binding Converter={StaticResource ZoomConverter}}

【讨论】:

  • 就这么简单!感谢您的帮助。
猜你喜欢
  • 2012-07-31
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2022-09-28
相关资源
最近更新 更多