【问题标题】:Dependency Property on ValueConverterValueConverter 上的依赖属性
【发布时间】:2010-03-30 05:45:49
【问题描述】:

使用 Silverlight 4,我试图在我的 UserControl 的 Resources 部分中初始化一个转换器,并引用我的控件中的一个对象。当我尝试运行应用程序时出现此异常,请注意实际 XAML 文件中的第 16 行是转换器:PointConverter.... 行:

System.Windows.Markup.XamlParseException: 2260 An error has occurred. [Line: 16 Position: 58]
    at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
    at WheresMyCar.View.Map.InitializeComponent()
    at WheresMyCar.View.Map..ctor()
    at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)  
    at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)    
    at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(Type type)  
    at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)  
    at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)    
    at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)    
    at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)    at System.Delegate.DynamicInvokeImpl(Object[] args)    
    at System.Delegate.DynamicInvoke(Object[] args)    
    at System.Windows.Threading.DispatcherOperation.Invoke() 
    at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)    
    at System.Windows.Threading.Dispatcher.OnInvoke(Object context)    
    at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)    
    at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)    
    at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

XAML:

<UserControl.Resources>
    <converter:PointConverter x:Key="pointConverter" Map="{Binding ElementName=ThingMap}" />
</UserControl.Resources>
<Grid>
    <m:Map
        x:Name="ThingMap" />
</Grid>

点转换器类:

public class PointConverter :
    DependencyObject,
    IValueConverter
{
    public Microsoft.Maps.MapControl.Map Map
    {
        get { return (Microsoft.Maps.MapControl.Map)GetValue(MapProperty); }
        set { SetValue(MapProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Map.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MapProperty =
        DependencyProperty.Register("Map", typeof(Microsoft.Maps.MapControl.Map), typeof(PointConverter), null);

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string param = (string)parameter;

        Microsoft.Maps.MapControl.Location location = value as Microsoft.Maps.MapControl.Location;
        if (location != null)
        {
            Point point = Map.LocationToViewportPoint(location);
            if (string.Compare(param.ToUpper(), "X") == 0)
                return point.X;
            else if (string.Compare(param.ToUpper(), "Y") == 0)
                return point.Y;
            return point;
        }

        return null;
    }

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

【问题讨论】:

  • Silverlight 4... 抱歉遗漏了
  • @Spoon16:完整的错误文本是什么?
  • @Dan 2260 发生错误。 [行:32 位置:58],还编辑了问题
  • 我希望看到的不止这些 - 没有进一步的错误描述吗?如果不是:第 32 行,在哪个文件中?
  • 为您添加了更多详细信息...它失败的行是

标签: c# silverlight data-binding xaml


【解决方案1】:

2260 是 AG_E_PARSER_BAD_PARAMETER_VALUE

这是 Silverlight 的奇迹之一:完全没有有用的错误消息。

所以...这是我在 Silverlight 2 和 3 中遇到的问题,我很惊讶你在 4 中看到它。你 100% 都在 SL4 中吗?

将您的 PointConverter 更改为从 FrameworkElement 继承而不是 DependencyObject。我希望这样做之后它会起作用。

如果这样做之后它确实有效,我会感到困惑,因为 SL4 应该使用 DependencyObject 进行数据绑定,而不是 SL3 和 SL2 使用的 FrameworkElement。

【讨论】:

  • 这是我在 VS 2010 中开发的 Windows Phone 7 系列应用程序...我认为它可能只是 SL4
  • 不幸的是,Windows Phone 7 上的 SL4 与 SL4 不一样。根据他们何时将 SL 代码库拆分为在 WP7 上运行,存在一些重大差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2011-06-25
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
相关资源
最近更新 更多