首页 > 解决方案 > IValueConverter 作为对象返回而不是预期的值

问题描述

我正在尝试将标签(或任何东西)上的字符串转换为另一个字符串。这适用于图标字体。

转换器

  [ValueConversion(typeof(string), typeof(string))]
    public class StringToIconConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string property = ((string)value).ToLower();
            switch (property)
            {
                case "maximize": return @"\e901";
                default return property;
            }
        }
         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return DependencyProperty.UnsetValue;
        }

      ...

   }

然后我将它添加到需要它的页面中

        <Helpers:StringToIconConverter x:Key="Icon" />

这就是我设置它的方式

<Button Style="{StaticResource NavButton}"
                        Tag="Document"
                        Command="{Binding GotoDataMatrixEnterCommand}">
    <Button.Content>
        <Label Content="{Binding Source={RelativeSource Self}, 
                         Path=Tag,
                         Converter={StaticResource Icon}, 
                         UpdateSourceTrigger=LostFocus}" 
                         Tag="Document" />
    </Button.Content>
</Button>

我得到的是

Windows.System.Control.Label在它的位置。我是否没有正确转换它,我不太确定为什么它没有替换正确的信息。我已经尝试了一些东西,并在网上阅读,尽管我现在被困住了。另外,当我尝试调试时它不起作用(它永远不会遇到断点)

标签: c#wpfivalueconverter

解决方案


问题在于Label.Content 上的绑定。你应该使用RelativeSource,而不是Source。

它应该是:

RelativeSource={RelativeSource Mode=Self}

此外,您的: should beswitch语句中存在语法错误(您缺少冒号)。StringToIconConverterdefault return property;default: return property;


推荐阅读