System.ArgumentException: “-17”不是属性“ViewportSize”的有效值。
Alice,请看下下面这个异常,它直接导致我们程序漰溃,连友好提示都没了。我不知从何入手,是FlexGrid里的,我也不知属性“ViewportSize”是什么用?我并没有设置它
异常时间:2015-12-02 11:02:23,226
异常级别:ERROR
异 常 类:logerror [(null)]
出现全局未捕获异常
System.ArgumentException: “-17”不是属性“ViewportSize”的有效值。
在 System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
在 System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
在 C1.WPF.FlexGrid.C1FlexGrid.UpdateScrollBars()
在 C1.WPF.FlexGrid.C1FlexGrid.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
在 System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 C1.WPF.C1LinePanel.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.ScrollContentPresenter.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
在 System.Windows.Controls.ScrollViewer.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
在 System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.Window.ArrangeOverride(Size arrangeBounds)
在 System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
在 System.Windows.UIElement.Arrange(Rect finalRect)
在 System.Windows.ContextLayoutManager.UpdateLayout()
在 System.Windows.UIElement.UpdateLayout()
在 System.Windows.Interop.HwndSource.SetLayoutSize()
在 System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
在 System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
在 System.Windows.Window.SetRootVisual()
在 System.Windows.Window.SetRootVisualAndUpdateSTC()
在 System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
在 System.Windows.Window.CreateSourceWindow(Boolean duringShow)
在 System.Windows.Window.CreateSourceWindowDuringShow()
在 System.Windows.Window.SafeCreateWindowDuringShow()
在 System.Windows.Window.ShowHelper(Object booleanBox)
在 System.Windows.Window.Show()
在 System.Windows.Window.ShowDialog() 回复 1楼CanYou1的帖子
感谢您的反馈。
ScrollBar的ViewportSize属性:设置滚动条上白条的长度值,应该等于C1FlexGrid的宽度值,即可视范围的长度或宽度值。
您可以检查下是否操作这个属性。
如果不是这个问题,建议您提供可以重现问题的Demo,我们帮您看看。 回复 2楼Alice的帖子
今天跟你挂完电话后就开始做Demo,从项目里面抠出Demo并不容易,搞了一天,终于把Demo做出来了,如下:
您需要用Nuget先还原下dll包,跑起来后,当去掉最后一个勾的时候,整个程序漰溃,如下:
回复 3楼CanYou1的帖子
谢谢您的Demo和提示。
通过您的Demo演示,我们通过如下代码重现您的问题:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="1" IsEnabled="False">
<c1:C1FlexGrid />
</Border>
</Grid>
是grid分行,然后还需要设置border的IsEnabled为False才能必然重现。
您的这个问题我会提交到产品组确认是否是Bug?如果有进一步反馈会在第一时间通知您。
很抱歉给您带来的不便。 回复 4楼Alice的帖子
好的,尽快回复我,谢了。 回复 3楼CanYou1的帖子
您好。
根据您的示例来看,问题是由于您设置了IsEnabled=false导致的。
这个时候flexgrid会设法计算viewport,但您在代码里更改了原数据,导致又要重新计算viewport,才出现了异常?
想请问您是有什么特殊需求,需要设置IsEnabled=false? 回复 6楼Alice的帖子
Border里加IsEnabled=false还是有必要的,我们是为了在某种情况下统一将其下的所有孩子禁用时用的,问题是我设置Boarder禁用,跟FlexGrid的viewport有什么关系呢?而且我改变数据源ItemsSource你们的flexgrid也是支持的,就只有当数据源ItemsSource个数为0时才报这个错,而且错得还很严重,导致我们的主程序直接漰掉了,我想这应该是C1Flexgrid的bug吧? 回复 7楼CanYou1的帖子
Border里只可能加一个子,也就是说您只需要设置一个IsEnabled=false?
通过Border设置后,您还需要设置C1FlexGrid的IsEnabled么?
如果不需要FlexGrid是Enabled的,那也就是说scrollbar也是没有意义的了。所以,可以重写FlexGrid的模板,删除掉template中的Scrollbar元素。
如果这种建议能够满足您的需求,我可以给您提供一个重写的demo。 回复 8楼Alice的帖子
Border下面孩子以及孩子的孩子,可以有很多的。这样,麻烦您先按您说的,重写下FlexGrid的模板吧。谢了。 回复 9楼CanYou1的帖子
重写FlexGrid的模板,删除掉template中的Scrollbar元素。请参考附件。
页:
[1]
2