Раскадровка для элемента DataTemplate в Silverlight

У меня есть DataGrid в моем приложении, в котором есть столбец с определенным CellTemplate с текстовым блоком и кнопкой в ​​нем.

Я хочу показывать кнопку только при наведении на эту конкретную ячейку. Как я могу достичь этого?

Заранее спасибо.


person vlaku    schedule 13.09.2010    source источник


Ответы (2)


Возможно, можно написать шаблонную раскадровку, которая ссылается на другие шаблонные элементы, но я был бы слишком напуган, чтобы попробовать это таким образом :)

Если вы создаете содержимое ячейки как пользовательский элемент управления (с текстовым полем и кнопкой), анимационные раскадровки затем легко создаются для этого одного элемента управления и запускаются с помощью прикрепленных поведений ControlStoryboardAction (я могу сделать это за считанные минуты, если вам нужен пример).

Свойства элемента управления для текстового поля и т. д. должны отображать как значения, так и изменения (например, реализуя их как свойства INotifyPropertyChanged или даже DependencyProperties), но тогда вы можете просто привязать CellTemplate к дочернему элементу управления вместо TextBox.

Надеюсь это поможет.

person Gone Coding    schedule 13.09.2010
comment
Я думаю, вы правы, я сделаю контроль с правильной раскадровкой. - person vlaku; 15.09.2010

Вот решение, которое использует триггеры.

<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>
person nzhenry    schedule 14.09.2010
comment
Триггеры не существуют в Silverlight. - person vlaku; 15.09.2010