找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou1

高级会员

45

主题

227

帖子

1359

积分

高级会员

积分
1359

活字格认证微信认证勋章元老葡萄

CanYou1
高级会员   /  发表于:2015-12-2 11:31  /   查看:12539  /  回复:11
Alice,请看下下面这个异常,它直接导致我们程序漰溃,连友好提示都没了。
我不知从何入手,是FlexGrid里的,我也不知属性“ViewportSize”是什么用?我并没有设置它

异常时间:2015-12-02 11:02:23,226 [1]
异常级别: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()

11 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-12-2 15:16:00
沙发
回复 1楼CanYou1的帖子

感谢您的反馈。
ScrollBar的ViewportSize属性:设置滚动条上白条的长度值,应该等于C1FlexGrid的宽度值,即可视范围的长度或宽度值。
您可以检查下是否操作这个属性。
如果不是这个问题,建议您提供可以重现问题的Demo,我们帮您看看。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-12-3 00:37:00
板凳
回复 2楼Alice的帖子

今天跟你挂完电话后就开始做Demo,从项目里面抠出Demo并不容易,搞了一天,终于把Demo做出来了,如下:



您需要用Nuget先还原下dll包,跑起来后,当去掉最后一个勾的时候,整个程序漰溃,如下:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-3 10:21:00
地板
回复 3楼CanYou1的帖子

谢谢您的Demo和提示。
通过您的Demo演示,我们通过如下代码重现您的问题:
  1.     <Grid>
  2.         <Grid.RowDefinitions>
  3.             <RowDefinition Height="Auto"></RowDefinition>           
  4.         </Grid.RowDefinitions>
  5.         <Border Grid.Row="1" IsEnabled="False">
  6.             <c1:C1FlexGrid />
  7.         </Border>
  8.     </Grid>
复制代码

是grid分行,然后还需要设置border的IsEnabled为False才能必然重现。

您的这个问题我会提交到产品组确认是否是Bug?如果有进一步反馈会在第一时间通知您。
很抱歉给您带来的不便。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-12-3 10:38:00
5#
回复 4楼Alice的帖子

好的,尽快回复我,谢了。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-3 11:43:00
6#
回复 3楼CanYou1的帖子

您好。
根据您的示例来看,问题是由于您设置了IsEnabled=false导致的。
这个时候flexgrid会设法计算viewport,但您在代码里更改了原数据,导致又要重新计算viewport,才出现了异常?

想请问您是有什么特殊需求,需要设置IsEnabled=false?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-12-3 14:15:00
7#
回复 6楼Alice的帖子

Border里加IsEnabled=false还是有必要的,我们是为了在某种情况下统一将其下的所有孩子禁用时用的,问题是我设置Boarder禁用,跟FlexGrid的viewport有什么关系呢?而且我改变数据源ItemsSource你们的flexgrid也是支持的,就只有当数据源ItemsSource个数为0时才报这个错,而且错得还很严重,导致我们的主程序直接漰掉了,我想这应该是C1Flexgrid的bug吧?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-3 19:48:00
8#
回复 7楼CanYou1的帖子

Border里只可能加一个子,也就是说您只需要设置一个IsEnabled=false?
通过Border设置后,您还需要设置C1FlexGrid的IsEnabled么?
如果不需要FlexGrid是Enabled的,那也就是说scrollbar也是没有意义的了。所以,可以重写FlexGrid的模板,删除掉template中的Scrollbar元素。

如果这种建议能够满足您的需求,我可以给您提供一个重写的demo。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-12-3 21:45:00
9#
回复 8楼Alice的帖子

Border下面孩子以及孩子的孩子,可以有很多的。这样,麻烦您先按您说的,重写下FlexGrid的模板吧。谢了。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-4 15:11:00
10#
回复 9楼CanYou1的帖子

重写FlexGrid的模板,删除掉template中的Scrollbar元素。请参考附件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部