我有一个基于数据网格的选择控件,它复制了Expression Blend中的Easing Function选择器。这是Easing Function project,所以你也会帮助自己:)
此选择器是屏幕上的永久固定装置,可以轻松尝试选项,同时仍然看起来像您通常从Blend下拉列表中选择的选项:
我需要阻止当前单元格进入最后一个“标题”列。
是否有一种简单的方法可以限制移动到列中,以便只能选择前3列?
答案 0 :(得分: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,源集合的适当大小和排序将达到所需的外观。
答案 1 :(得分:0)
从概念上讲,WPF和SL DataGrid很糟糕。任何需要行和列之间动态关系的东西都是hackish。例如,单元格的值无法在运行时计算,无需反映UI绑定,并且由DataGrid用于在单元格中显示值的硬连线策略确定。它假定Columns在数据源中显示特定对象,并假定它知道如何遍历该数据源。 (对于它的价值,我已经向至少一个WPF UI组件供应商“成功地”(他们的话,而不是我的话)论证了这一点,他们可能会创建一个以这种方式工作的DataGrid。)如果您熟悉Ext .js,这就是DataGrid在HTML / CSS / JS框架中的工作方式:DataGrid不知道如何处理DataSource,你必须告诉它该怎么做。一切都完全模块化,依赖的硬连接很少,没有反射就无法覆盖。
最好创建自己的类似DataGrid的控件,尤其是在没有大量行或列实现的情况下。您的控件应该让您随心所欲地遍历DataSource,并提供有关如何呈现单元格和编辑单元格的信息。单元格编辑器应该实现一个Flyweight模式来节省内存,但这只是因为这是一个标准技巧。