Silverlight 如何限制单元格的选择以排除DataGrid中的列?

Silverlight 如何限制单元格的选择以排除DataGrid中的列?,silverlight,datagrid,silverlight-4.0,Silverlight,Datagrid,Silverlight 4.0,我有一个基于datagrid的选择控件,它复制Expression Blend中的Easing函数选择器。这是为客户准备的,所以您也可以自己动手:) 该选择器在屏幕上是一个永久性的固定装置,可以方便地尝试选项,同时看起来仍然足够像您通常从“混合”中的下拉列表中选择的选项: 我需要阻止当前单元格移动到最后一个“标题”列 有没有一种简单的方法来限制移动到列中,以便只选择前3列?我倾向于这样做:- <Grid> <Grid.ColumnDefinitions>

我有一个基于datagrid的选择控件,它复制Expression Blend中的Easing函数选择器。这是为客户准备的,所以您也可以自己动手:)

该选择器在屏幕上是一个永久性的固定装置,可以方便地尝试选项,同时看起来仍然足够像您通常从“混合”中的下拉列表中选择的选项:

我需要阻止当前单元格移动到最后一个“标题”列


有没有一种简单的方法来限制移动到列中,以便只选择前3列?

我倾向于这样做:-

 <Grid>
    <Grid.ColumnDefinitions>
       <ColumnDefinition Width="150" />
       <ColumnDefinition Width="50" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
       <RowDefinition />
       <RowDefinition Height="250" />
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Grid.ColumnSpan="2">
       <!-- Heading Text Blocks -->
    </StackPanel>
    <ListBox ItemsSource="{Binding SetOfFunctions}" Grid.Row="1">
       <ListBox.ItemsPanel>
           <ItemsPanelTemplate>
               <toolkit:WrapPanel />
           </ItemsPanelTemplate>
       </ListBox.ItemsPanel>
    </ListBox>
    <ItemsControl ItemsSource="{Binding SetOfFunctionNames}" Grid.Row="1" Grid.Column="1" />
  </Grid>


这是一个基本的框架概念,这里唯一的选择器是ListView,适当调整源集合的大小和顺序将达到所需的外观。

从概念上讲,WPF和SL DataGrid很糟糕。任何需要行和列之间的动态关系的东西都是粗制滥造的。例如,一个单元格的值不能在运行时对UI绑定进行w/o反射时计算,而是由DataGrid在单元格中显示值的硬连线策略确定。它假定列显示数据源中的特定对象,并假定它知道如何遍历该数据源。(值得一提的是,我已经向至少一家WPF UI组件供应商“成功地”论证了这一点(他们的话,而不是我的),他们可能会创建一个这样工作的DataGrid。)如果您熟悉Ext.js,DataGrid在HTML/CSS/js框架中就是这样工作的:DataGrid不知道如何处理数据源,你必须告诉它该怎么做。所有的东西都是完全模块化的,很少有依赖关系的硬连接,没有反射就无法覆盖


您最好创建自己的类似DataGrid的控件,尤其是在没有大量行或列要具体化的情况下。控件应允许您按照自己的意愿遍历数据源,并提供有关如何渲染单元格和编辑单元格的信息。cell editor可能应该实现一个Flyweight模式以节省内存,但这只是因为这是一个标准技巧。

@HiTech您可以切换cell的IshittesVisible属性。基于列索引。你试过了吗?:)@阿凡达:我还需要停止对专栏的键盘导航。继续提供建议:)在WPF中,我们可以通过黑客来实现这一点。但是,silverlight无法获得它。:)@阿凡达:一定有办法。我们对模板和事件有如此多的控制权,以至于我们无法对行为进行简单的更改,这似乎很疯狂:(我想我可以将最后一列添加到第三列的模板中,并将单元格选择模板更改为仅突出显示单元格的左侧?@Avatar:列表框组合起来更快,但如果界面有用,则需要上下左右键导航(在样本类型之间快速选择)。这是设计的主要选择控件。唯一的要求是它看起来像上面的布局,但可以使用鼠标和键盘进行导航。DataGrid具有方向键支持。Cheers@AnthonyWJones:非常有趣的解决方案。我特别喜欢单列表转换为3列部分(目前我使用SQL triple join来平滑结果)。今晚我将尝试一下。WrapPanel是否允许正确的上、下、左、右键导航(如DataGrid)@ AthoNojjns:在更新控件的过程中尝试你的例子,但是你从哪里得到Silverlight ListVIEW?谢谢。@ HiTeC:对不起,大脑衰退了,处理多个控制框架。我的意思是标准ListBox,相应地编辑。@耻辱……昨晚我试过了,但是标准的ListBox只有键盘NA。在一个维度(沿着选项列表)上激活,这需要上/下/左/右(像网格一样)@HiTech:一点分类和一些截取的
OnKeyDown
应该可以做到。如果有机会,我会看看是否可以构建一个
WrapBox
,这是一个
ListBox
版本,允许这种定向导航。@user429921:我在寻找一个代码解决方案,并且很乐意接受一个被黑客攻击的网格实现正如AnthonyWJones所建议的(即使是现在的代码隐藏也是受欢迎的)。只是现在需要一些东西,以后总是可以用一个真正的自定义控件替换它。无论如何,谢谢你的建议。我对赏金本身不感兴趣(尽管收集代表是件好事,这样如果我有困难的问题需要回答,我就可以提供奖金)。我更感兴趣的是您为更好的DataGrid提供的良好用例。我在WPF论坛上阅读了各种针对此类WPF/SL DataGrid问题的黑客攻击,对我来说,它们都不令人满意。我只是没有强迫自己从头开始完全创建DataGrid,因为这需要大量工作。:)