【问题标题】:Why does default value for DatePicker SelectedDate cause StackOverflow exception?为什么 DatePicker SelectedDate 的默认值会导致 StackOverflow 异常?
【发布时间】:2016-11-24 05:53:40
【问题描述】:

我是 WPF(和 stackoverflow!)的新手,并且一直在寻找一种在 DatePicker 控件中设置默认日期的简单方法。我想在打开主视图时显示当前日期,并且更喜欢仅通过 XAML 执行此操作。

我发现的许多帖子都建议使用标记扩展名和命名空间引用(如 this)将静态值插入 XAML,我尝试过但没有成功,结果是 StackOverflow 异常:“类型未处理的异常'System.StackOverflowException' 发生在 mscorlib.dll"

我不知道我做错了什么,或者是否有某种递归使我的应用程序崩溃?感谢您提供任何和所有帮助。

主视图 XAML:

<Window x:Class="Tasks.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        
    xmlns:local="clr-namespace:Tasks"
    xmlns:vm="clr-namespace:Tasks.ViewModel"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    mc:Ignorable="d"
    Title="TASK LIST" Height="600" Width="900">
<Window.DataContext>
    <vm:MainViewModel/>
</Window.DataContext>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="20*"/>          
    </Grid.RowDefinitions>        
    <DatePicker x:Name="dpSelectedDate" SelectedDate="{x:Static sys:DateTime.Today}" />        
</Grid>

【问题讨论】:

  • 因此,如果您删除 DatePicker 行,您将不再收到异常?你也可以发布堆栈跟踪吗?
  • @rudeboy 日期选择器没有问题,请检查您的 MainView 构造函数
  • @Quantic 如果我完全删除 DatePicker 行或仅删除应用程序加载的 SelectedDate 属性,也不例外。除了以下消息:“已超出 Visual Studio 支持的最大堆栈帧数。”以及消息“没有代码可显示,因为所有线程都在执行外部代码。”
  • @patrickInMpls 我检查了 MainView 构造函数,但除了 InitializeComponent() 之外没有代码;
  • 如果我通过后面代码中的构造函数设置 SelectedDate 值,例如 dpSelectedDate.SelectedDate = DateTime.Today;一切都按预期进行。

标签: c# wpf xaml datepicker stack-overflow


【解决方案1】:

我刚刚测试了您的代码,对我来说它有效。 您确定 StackOverflowException 是由 SelectedDate 属性引起的吗?尝试移除Window的DataContext:

<Window.DataContext>
    <vm:MainViewModel/>
</Window.DataContext>

【讨论】:

  • 我不确定,但我尝试按照建议删除窗口的 DataContext,但仍然出现异常。
  • Mhhhh,您需要隔离问题。尝试创建一个新的 WPF 应用程序,并仅复制和粘贴所需的 XAML。你有例外吗?
  • 你是对的,只是不确定如何隔离。新的测试项目在 VS2013 和 VS2015 中都会抛出异常。在同事机器上测试没有问题。
  • 也许与您的文化、语言或地区有关?尝试使用 System.Threading.Thread.CurrentCulture 和 System.Threading.Thread.CurrentUICulture 查看您当前的文化。
  • System.Threading.Thread.CurrentCulture: en-CA System.Threading.Thread.CurrentUICulture: en-US
【解决方案2】:

其他项目中开始出现其他错误,因此我决定重新映像我的工作站并重新安装 Visual Studio,从而解决了我遇到的问题。感谢大家的cmets和建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多