我有一个UWP应用以下代码:在UWP枚举固定的ArgumentException的DependencyProperty
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:该参数不正确。 createDefaultValueCallback
事情我已经尝试:
- 改变的DependencyProperty为int和铸造
- 在传承为null,PropertyMetadata
- 传递null在为PropertyMetadata 的默认值
- 传递函数而不是默认值的值
无论我尝试什么,在启动时总是会引发上述异常,以ActiveInteractionMode的SetValue行为目标。我错过了什么让这不起作用?
更新:InteractionModeInternal是将用于让我处理
private InteractionMode _interactionModeInternal;
private InteractionMode InteractionModeInternal
{
get => _interactionModeInternal;
set
{
_interactionModeInternal = value;
OnInteractionModeInternalChanged(value);
}
}
private void OnInteractionModeInternalChanged(InteractionMode interactionMode)
{
Log.Debug($"InternalInteractionMode changed to {interactionMode}");
}
我目前还没有逻辑驱动它关闭过程中暂时改变ActiveInteractionMode一个简单的私人财产,除了它将一个字符串记录到控制台。
更新2:进一步调试后,我已经找到了崩溃发生在启动的原因是,我是有约束力的值在XAML这些属性。在注释掉这些绑定之后,应用程序能够启动,但随后尝试访问Get或Set for ActiveInteractionMode会导致发生与createDefaultValueCallback相同的错误。
如果你改变了行'新PropertyMetadata(InteractionMode.None,...))会发生什么;'这样:'新PropertyMetadata(DependencyProperty.UnsetValue,...));' – Laith
@Laith无影响。同样的问题。 –
您可以尝试关闭Visual Studio并在代码的解决方案目录中删除所有'bin'和'obj'目录。我有一种感觉,东西被锁定,你的自动生成的代码不会更新。 – Laith