0

如何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。谢谢,仅此而已。

4

1 回答 1

1

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

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

本质上,整个教程都是关于获取 DataGridColumn 的 CellStyle.Template 并向 Selected State 添加动画。

于 2011-02-18T18:07:57.963 回答