【发布时间】:2017-09-29 01:54:41
【问题描述】:
我在 UWP 应用中有以下代码:
public sealed partial class CanvasMapControl : UserControl
{
public static readonly DependencyProperty ActiveInteractionModeProperty =
DependencyProperty.Register(nameof(ActiveInteractionMode),
typeof(InteractionMode),
typeof(CanvasMapControl),
new PropertyMetadata(InteractionMode.None, CanvasMapControl_InteractionModeChanged));
public InteractionMode ActiveInteractionMode {
get => (InteractionMode)GetValue(ActiveInteractionModeProperty);
set => SetValue(ActiveInteractionModeProperty, value);
}
private static void CanvasMapControl_InteractionModeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
((CanvasMapControl)obj).InteractionModeInternal = (InteractionMode)args.NewValue;
}
// ...rest of class...
}
InteractionMode 是一个枚举。当我尝试运行我的应用程序时,出现以下异常:
System.TypeInitializationException: 'MyApp.CanvasMapControl' 的类型初始化器引发了异常。'
内部异常
ArgumentException:参数不正确。创建默认值回调
我尝试过的事情:
- 将 DependencyProperty 更改为 int 并进行强制转换
- 为 PropertyMetadata 传递 null
- 为 PropertyMetadata 的默认值传递 null
- 传递函数而不是默认值
无论我尝试什么,在启动时它总是会抛出上述针对 ActiveInteractionMode 的 SetValue 行的异常。我错过了什么导致这不起作用?
更新:InteractionModeInternal 是一个简单的私有属性,用于允许我在处理期间临时更改 ActiveInteractionMode
private InteractionMode _interactionModeInternal;
private InteractionMode InteractionModeInternal
{
get => _interactionModeInternal;
set
{
_interactionModeInternal = value;
OnInteractionModeInternalChanged(value);
}
}
private void OnInteractionModeInternalChanged(InteractionMode interactionMode)
{
Log.Debug($"InternalInteractionMode changed to {interactionMode}");
}
我目前没有任何逻辑驱动它,除了它将一个字符串记录到控制台。
更新 2:经过进一步调试,我发现启动时发生崩溃的原因是我在 XAML 中将值绑定到这些属性。注释掉这些绑定后,应用程序能够启动,但尝试访问 ActiveInteractionMode 的 Get 或 Set 将导致 createDefaultValueCallback 发生同样的错误。
【问题讨论】:
-
如果您将
new PropertyMetadata(InteractionMode.None, ...));行更改为:new PropertyMetadata(DependencyProperty.UnsetValue, ...)); -
@Laith 无效。同样的问题。
-
您可以尝试关闭Visual Studio,并在您的代码的解决方案目录中,删除所有
bin和obj目录。我感觉有些东西被锁定了,您的自动生成的代码隐藏没有更新。 -
@Laith Closed VS,删除解决方案中所有项目的 bin 和 obj 文件夹。当我打开它备份时,它很难找到很多框架类,但是在进行包还原(表示所有内容都已下载)后,它找到了它们。但是在运行应用程序时,同样的问题。
-
你能提供更多关于
InteractionModeInternal的房产的细节吗?
标签: c# enums uwp dependency-properties argumentexception