Как показать кнопку только при выбранной строке Silverlight DataGrid - PullRequest
0 голосов
/ 18 февраля 2011

Как я могу отобразить кнопку в 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 Ответ

1 голос
/ 18 февраля 2011

Всякий раз, когда вы хотите изменить внешний вид чего-либо в Silverlight, вы должны думать с точки зрения VisualStateManager.Чтобы изменить внешний вид ячейки Selected DataGrid, вам нужно воспользоваться чудесами VSM.Редактируя состояние «Выбрано» DataGridColumn.CellStyle, вы можете изменить внешний вид выбранной ячейки сетки.

  1. В Blend перетащите новую DataGrid на страницу.
  2. Щелкните правой кнопкой мыши DataGrid и выберите «Добавить столбец -> Добавить DataGridTemplateColumn»
  3. Щелкните правой кнопкой мыши DataGridTemplateColumn на панели «Объект и временная шкала» и выберите «Редактировать стили столбцов -> Изменить стиль ячейки -> Изменить копию»
  4. Щелкните правой кнопкой мыши «Стиль» на панели «Объекты и временная шкала».и перейдите к «Редактировать шаблон -> Изменить текущий».
  5. Теперь перейдем к интересной части, как конкретно решить проблему исчезающей кнопки.Если кнопка - единственное, что у вас есть в этом CellTemplate, тогда вы можете просто скрыть все содержимое ячейки.
  6. Выберите состояние «Выбрано» на панели «Состояния».
  7. Установите видимость ContentPresenter в CellStyle.Template как Свернутая.(Лучше UX было бы добавить анимацию 0,3 секунды, принимая непрозрачность от 100% до 0%).

По сути, весь этот учебник посвящен переходу на CellStyle.Template для вашего DataGridColumn и добавлению анимации в выбранное состояние.

...