【问题标题】:Can I declare more than one converter? WP8我可以申报多个转换器吗? WP8
【发布时间】:2016-09-05 07:21:29
【问题描述】:

我正在使用 BooleanToVisibilityConvertor 来处理 ListBox DataTemplate 中 TextBlock 的可见性。

这是我的 XAML 代码:

    <phone:PhoneApplicationPage.Resources>
    <Converters:BooleanToVisibilityConvertor x:Key="booleanToVisibilityConvertor"/>
    </phone:PhoneApplicationPage.Resources>

    <TextBlock Grid.Row="2" HorizontalAlignment="Right" Padding="0,0,7,0" Visibility="{Binding AverageConsumption, Converter={StaticResource booleanToVisibilityConvertor}}"> 
     <Run Text="{Binding AverageConsumption}"/>
     <Run Text="l./100 km."/>
    </TextBlock>

以及背后的代码:

public class BooleanToVisibilityConvertor : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        {
            if (value != null)
            {
                if (!string.IsNullOrEmpty(value.ToString()))
                {
                    return Visibility.Visible;
                }

            }
            return Visibility.Collapsed;
        }
    }

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

这是正确的,但我需要另一个(反向)转换器用于放置在同一位置的另一个 TextBlock(Grid.Row="2" Horizo​​ntalAlignment="Right") 使用静态 Text="Partial Refueling" 所以当 {Binding AverageConsumption} 不为空或为空时,第一个 TextBlock 将可见,第二个将被折叠,反之亦然。像这样的:

    class BooleanToVisibilityConvertorReversed : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        {
            if (value != null)
            {
                if (!string.IsNullOrEmpty(value.ToString()))
                {
                    return Visibility.Collapsed;
                }
            }
            return Visibility.Visible;
        }
    }

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

我尝试在 XAML 中声明另一个转换器:

    <phone:PhoneApplicationPage.Resources>
    <Converters:BooleanToVisibilityConvertor x:Key="booleanToVisibilityConvertor"/>
    <Converters:BooleanToVisibilityConvertorReversed x:Key="booleanToVisibilityConvertorReversed"/>
    </phone:PhoneApplicationPage.Resources>

但 InitializeComponent() 出现异常: 'System.Windows.ni.dll 中发生'System.Windows.Markup.XamlParseException' 类型的第一次机会异常' 我该如何解决这个问题?

【问题讨论】:

  • 为什么你认为这条线是罪魁祸首?
  • 我认为原因在这里: 它只是无法初始化页面。我已经移除了另一个转换器并只尝试了这个,但仍然有同样的异常。
  • 如果你删除它,错误会消失吗?也许有一些隐藏的符号?尝试使用 IntelliSense 帮助重新键入它
  • 我做了,但还是一样。我可以构建它,但不能初始化页面。实际上我可以使用多个这样的转换器吗?
  • 当然可以。它只是另一种资源。没什么特别的

标签: xaml windows-phone-8 converter


【解决方案1】:

好像我发现了你的问题。您的 BooleanToVisibilityConvertorReversed 课程不公开。把它公开,你的问题应该消失了。

【讨论】:

  • 我们的答案几乎越界了哈哈。我刚刚发现了相同的,它现在正在工作。不管怎样,谢谢你!你是第一个,所以我会标记你回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多