找回密码
 立即注册

QQ登录

只需一步,快速开始

jacky_zh

中级会员

20

主题

54

帖子

508

积分

中级会员

积分
508
jacky_zh
中级会员   /  发表于:2016-6-28 15:49  /   查看:4365  /  回复:8
本帖最后由 jacky_zh 于 2016-6-28 16:20 编辑

我原控件代码如下:


希望换成 c1:C1FlexGrid 代码如下,结果  Triggers 和 ContextMenu都失效了,不知应该怎么使用?





本帖子中包含更多资源

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

x

8 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-6-28 18:05:08
沙发
ContextMenu直接通过XAML代码就可以设置
  1.   <c1:C1FlexGrid >
  2.             <c1:C1FlexGrid.ContextMenu>
  3.                 <ContextMenu>
  4.                     <MenuItem>abc</MenuItem>
  5.                 </ContextMenu>
  6.             </c1:C1FlexGrid.ContextMenu>           

  7.         </c1:C1FlexGrid>
  8.     </Grid>
复制代码

Trigger也是可以使用的。

你提到失效了,是出现了什么异常,最好提供一个可以重现的Demo,我帮你看看。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jacky_zh
中级会员   /  发表于:2016-6-29 10:39:36
板凳
本帖最后由 jacky_zh 于 2016-6-29 10:44 编辑

我已经测试出 header属性不能 绑定 方法
Header="{Binding Converter={StaticResource T}, ConverterParameter=DatabaseLeft#StrEditRecordName}" 这样 不能正常显示控件
其次是 command方法不能绑定 viewmodel里的事件,绑定后会导致不能显示控件。
Command="{Binding EditRecordNameClickCommand}"   
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}"
去掉这个个属性可以正常显示。
但是这2个属性都是我这必须要使用属性。
参考代码如下:
<c1:C1FlexGrid.ContextMenu>                  
                  <ContextMenu Visibility="{Binding AllVisibility, Mode=TwoWay}" FontFamily="Arial">
                        <MenuItem  Header="Edit RecordName" Name="EditRecordName"
                             Visibility="{Binding EditRecordNameVisibility, Mode=TwoWay}"
                             Command="{Binding EditRecordNameClickCommand}"
                             CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}"/>
                        <MenuItem  Header="ViewData" Name="ViewData"/>  
                    </ContextMenu>                    
                </c1:C1FlexGrid.ContextMenu>
回复 使用道具 举报
jacky_zh
中级会员   /  发表于:2016-6-29 10:50:55
地板
进一步测试 是CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}" 导致不能显示控件,但是参数该如何传递?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-6-29 14:34:42
5#
jacky_zh 发表于 2016-6-29 10:50
进一步测试 是CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorTy ...

谢谢反馈。
您的CommandParameter参数需要传递什么?
ContextMenu是它自身视觉树的根节点,所以通过RelativeSource.FindAncestor就找不到FlexGrid。另:ContextMenu有其自身的视觉树并且它不是FlexGrid视觉树的一部分。

最好能将你出问题的Demo发过来,我们才能快速的定位帮你看看。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jacky_zh
中级会员   /  发表于:2016-6-30 15:25:50
6#
<MenuItem >绑定事件的问题已经解决。谢谢alice。
column中header属性不能绑定转换器的问题,有没有提示,或者例子
Header="{Binding Converter={StaticResource T}, ConverterParameter=DatabaseLeft#StrEditRecordName}"
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-6-30 17:24:38
7#
jacky_zh 发表于 2016-6-30 15:25
绑定事件的问题已经解决。谢谢alice。
column中header属性不能绑定转换器的问题,有没有提示,或者例子
H ...

ContextMenu本身是微软的控件,你可以搜下ContextMenu相关知识。

如果是产品上出问题,麻烦给一个Demo,我帮你看看是否有问题,如何解决。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jacky_zh
中级会员   /  发表于:2016-7-1 10:05:05
8#
ContextMenu控件使用没问题了,他的<MenuItem >的header也是可以 Header="{Binding Converter={StaticResource T}, ConverterParameter=DatabaseLeft#StrEditRecordName}" 的。

Flexgrid的column的header属性不行,
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-7-1 10:16:17
9#
本帖最后由 Alice 于 2016-7-1 10:17 编辑
jacky_zh 发表于 2016-7-1 10:05
ContextMenu控件使用没问题了,他的的header也是可以 Header="{Binding Converter={StaticResource T}, Con ...

谢谢您提供的代码。
通过XAML来做Header属性的binding是不行的,因为它不是dependency property。
如果想要绑定Header Cell并且自定义它,需要使用C1FlexGrid提供的CellFactory功能。
代码参考:
  1. <p>//1.先设置c1flexgrid的CellFactory
  2.             c1flexgrid1.CellFactory = new MyCellFactory();</p><p>
  3. //2.重写CellFactory的CreateColumnHeaderContent方法
  4. public class MyCellFactory:CellFactory
  5.     {
  6.         public override void CreateColumnHeaderContent(C1FlexGrid grid, Border bdr, CellRange range)
  7.         {            
  8.             base.CreateColumnHeaderContent(grid, bdr, range);
  9.             TextBlock tb = new TextBlock();
  10.             Binding Bd = new Binding();
  11.             Bd.Path = new PropertyPath("ColumnName");
  12.             tb.SetBinding(TextBlock.TextProperty, Bd);
  13.             bdr.Child = tb;
  14.         }
  15.     }

  16. </p>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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