【发布时间】:2019-10-23 08:36:13
【问题描述】:
我的 XAML 已经走到了这一步,我想知道我在图标/按钮方面是否采用了正确的方法来在数据网格中显示数据。我正在使用 Material Design。
我在视图模型中有一个名为“IsLocked”的布尔属性。我想要一个列中的图标,该图标将根据值更改为锁定或解锁图标,并且我希望能够单击锁定以更改值。我错过了按钮/单击事件。我试图将它保存在 XAML 中。
奖励将是一些关于鼠标悬停的 UI 反馈,让用户知道他们可以点击它。我怎样才能将它也纳入其中?
这是正确的方法吗?如何将其变成可点击的东西?
<DataGridTemplateColumn Width="Auto" Header="Is Locked">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<materialDesign:PackIcon x:Name="LockIcon" Kind="LockOpenOutline" Foreground="Green"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding isLocked}" Value="True">
<Setter Property="Kind" Value="Lock" TargetName="LockIcon"/>
<Setter Property="Foreground" Value="Red" TargetName="LockIcon"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
【问题讨论】:
-
您可以使用 ToggleButton,它使用触发器根据 IsChecked 的值交换模板中的图标。或者只是将图标放在其内容中并与您拥有的触发器交换。您将 IsLocked 绑定到 ToggleButton 的 IsChecked 属性。这是执行此操作的规范方法。如果需要,我可以提供一个示例,但我敢打赌,您可以轻松找到一些示例。
标签: wpf xaml mvvm data-binding datagrid