如何仅在选择Silverlight DataGrid行时显示按钮

时间:2011-02-18 17:09:03

标签: silverlight binding datagridtemplatecolumn

如果仅在选择了行时才能在DataGridTemplateColumn中显示按钮?我试过这个,但当然没有IsSelected可供我使用。在绑定行的实体上拥有IsSelected属性是没有意义的,即便如此,我也不希望必须将DataGrid与我的模型紧密联系起来。无论如何,接口可以自己处理吗?

这就是我所拥有的:

<sdk:DataGrid Name="_categorySummaryDataGrid" 
              MinHeight="200" 
              ItemsSource="{Binding ElementName=_userControl, Path=CategorySummaries}"
              AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="_nameColumn" Binding="{Binding Path=Name}" Header="Name" Width="Auto" IsReadOnly="True" />
        <sdk:DataGridTextColumn x:Name="_descriptionColumn" Binding="{Binding Path=Description}" Header="Description" Width="*" IsReadOnly="True" />
        <sdk:DataGridTemplateColumn x:Name="_detailsColumn" Width="Auto">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="..." ToolTipService.ToolTip="View Category Details" 
                            Visibility="{Binding Path=IsSelected, Converter={StaticResource BooleanToVisibility}}"/>
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

出于设计原因,我希望按钮仅在选择包含它的行时显示。并且,如果可能的话,我希望它在行悬停时以不同的方式显示。

我希望Silverlight和WPF似乎有更多限制。我希望这些事情是可能的。谢谢。 :)

修改

我没有,也不会得到Expression Blend。谢谢,就是这样。

1 个答案:

答案 0 :(得分:1)

每当你想要改变Silverlight中任何东西的视觉外观时,你必须考虑VisualStateManager。要更改Selected DataGrid单元格的外观,您需要利用VSM的奇迹。通过编辑DataGridColumn.CellStyle的“Selected”状态,您可以更改所选网格单元格的外观。

  1. 在“混合”中,将新的DataGrid拖放到页面上。
  2. 右键单击DataGrid并选择“添加列 - &gt;添加DataGridTemplateColumn”
  3. 右键单击“对象和时间线”窗格中的DataGridTemplateColumn,然后转到“编辑列样式 - &gt;编辑CellStyle - &gt;编辑副本”
  4. 右键单击“对象和时间线”窗格中的“样式”,然后转到“编辑模板 - &gt;编辑当前”。
  5. 现在有了一个有趣的部分,如何专门解决消失按钮的问题。如果按钮是您在CellTemplate中唯一拥有的按钮,那么您可以隐藏单元格的全部内容。
  6. 从“状态”窗格中选择“已选择”状态。
  7. 将CellStyle.Template中ContentPresenter的可见性设置为Collapsed。 (一个更好的用户体验将添加一个0.3秒的动画,将不透明度从100%增加到0%)。
  8. 基本上,整个教程是关于为DataGridColumn获取CellStyle.Template并向Selected State添加动画。