У меня есть DataGrid в моем приложении, в котором есть столбец с определенным CellTemplate с текстовым блоком и кнопкой в нем.
Я хочу показывать кнопку только при наведении на эту конкретную ячейку. Как я могу достичь этого?
Заранее спасибо.
У меня есть DataGrid в моем приложении, в котором есть столбец с определенным CellTemplate с текстовым блоком и кнопкой в нем.
Я хочу показывать кнопку только при наведении на эту конкретную ячейку. Как я могу достичь этого?
Заранее спасибо.
Возможно, можно написать шаблонную раскадровку, которая ссылается на другие шаблонные элементы, но я был бы слишком напуган, чтобы попробовать это таким образом :)
Если вы создаете содержимое ячейки как пользовательский элемент управления (с текстовым полем и кнопкой), анимационные раскадровки затем легко создаются для этого одного элемента управления и запускаются с помощью прикрепленных поведений ControlStoryboardAction (я могу сделать это за считанные минуты, если вам нужен пример).
Свойства элемента управления для текстового поля и т. д. должны отображать как значения, так и изменения (например, реализуя их как свойства INotifyPropertyChanged или даже DependencyProperties), но тогда вы можете просто привязать CellTemplate к дочернему элементу управления вместо TextBox.
Надеюсь это поможет.
Вот решение, которое использует триггеры.
<DataGrid>
<DataGrid.Items>
<System:String>hello</System:String>
<System:String>world</System:String>
</DataGrid.Items>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid x:Name="MyGrid" Background="Transparent">
<StackPanel>
<TextBlock Text="{Binding}"/>
<Button x:Name="MyButton" Visibility="Hidden" Content="{Binding}"/>
</StackPanel>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" SourceName="MyGrid">
<Trigger.Setters>
<Setter TargetName="MyButton" Property="Visibility" Value="Visible"/>
</Trigger.Setters>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>