Silverlight DataGrid에서 RowDetailsTemplate을 사용하여 행 세부 정보를 표시하고 있습니다. RowDetailsVisibilityMode = "VisibleWhenSelected"설정은 좋은 사용자 환경을 제공하지 않습니다 (한 번에 한 행만 펼칠 수 있으며 모든 행은 접을 수 없음). 개별 행을 확장/축소 할 수 있도록 각 행에 확장/축소 버튼을 추가하는 가장 쉬운 방법은 무엇입니까?Silverlight DataGrid의 확장/축소 단추
5
A
답변
4
저는이 문제에 대한 해결책을 블로그에 올리려고했습니다. 그리드 RowDetailsVisibilityMode를 Collapsed로 설정하고 스타일이 지정된 ToggleButton과 함께 DataGridTemplateColumn을 사용하여 행 가시성을 토글합니다.
바인딩 또는 TriggerAction을 사용하여 행 가시성을 전환하려면 전환 버튼을 배선 할 수 있습니다.
ToggleButton.IsChecked를 XAML (DataGridRow.DetailsVisibility)에 존재하지 않는 요소에 바인딩하려고하기 때문에 바인딩을 코드 숨김으로 수행해야합니다. (더 강력한 RelativeSource 바인딩이있는 SL5에서 허용됩니다 트리 그 내용은
private void ToggleButton_Loaded(object sender, RoutedEventArgs e)
{
ToggleButton button = sender as ToggleButton;
DataGridRow row = button.FindAncestor<DataGridRow>(); //Custom Extension
row.SetBinding(DataGridRow.DetailsVisibilityProperty, new Binding()
{
Source = button,
Path = new PropertyPath("IsChecked"),
Converter = new VisibilityConverter(),
Mode = BindingMode.TwoWay
});
}
: 코드 숨김 바인딩 방법
/// <summary>
/// Walk up the VisualTree, returning first parent object of the type supplied as type parameter
/// </summary>
public static T FindAncestor<T>(this DependencyObject obj) where T : DependencyObject
{
while (obj != null)
{
T o = obj as T;
if (o != null)
return o;
obj = VisualTreeHelper.GetParent(obj);
}
return null;
}
: 나는 헬퍼 클래스에서이 확장 방법이 두 솔루션의 경우)
erAction 방법 : XAML에서 다음
public class ExpandRowAction : TriggerAction<ToggleButton>
{
protected override void Invoke(object o)
{
var row = this.AssociatedObject.FindAncestor<DataGridRow>();
if (row != null)
{
if (this.AssociatedObject.IsChecked == true)
row.DetailsVisibility = Visibility.Visible;
else
row.DetailsVisibility = Visibility.Collapsed;
}
}
}
:
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton Style="{StaticResource PlusMinusToggleButtonStyle}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<behaviors:ExpandRowAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ToggleButton>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
관련 문제
- 1. DataGrid의 마지막 행에 단추 추가
- 2. silverlight 4 : DataGrid의 셀 병합
- 3. SilverLight Datagrid의 하이퍼 링크 버튼
- 4. Silverlight 단추 Click
- 5. SilverLight 메서드를 실행하는 Javascript 단추?
- 6. Silverlight DataGrid의 모든 열을 인쇄하는 방법
- 7. Silverlight DataGrid의 FILTER 기능과 같은 Excel?
- 8. Silverlight DataGrid의 ItemSource 업데이트시 스크롤 위치 유지
- 9. DataGrid의 Silverlight DatePicker가 NULL 날짜를 허용합니다.
- 10. 텍스트 줄 바꾸기 Silverlight 라디오 단추
- 11. 단추 클릭 이벤트가있는 Silverlight 프로젝트 열기
- 12. Silverlight 탐색 - 뒤로 단추 동작을 재정의하는 방법
- 13. Silverlight : 텍스트 자르기가 적용된 단추 템플릿
- 14. Silverlight 3에서는 DataGrid의 모든 셀을 동시에 편집 할 수 있습니까?
- 15. XAML의 DataGrid 외부에서 Silverlight DataGrid의 열을 정의하려면 어떻게해야합니까?
- 16. Silverlight DataGrid의 selectionchanged 이벤트에서 사용자 지정 메시지 상자를 어떻게 표시합니까?
- 17. 런타임 동안 Silverlight DataGrid의 열을 동적으로 지정 및 변경 (MVVM)
- 18. Silverlight DataGrid의 열 정렬은 프로그래밍 방식으로 변경된 셀을 업데이트하지 않습니다.
- 19. Silverlight 3 DataGrid의 헤더 템플릿 내용을 가운데 정렬하는 방법은 무엇입니까?
- 20. Silverlight RIA에서 DataGrid의 itemsource에 바인딩 할 때 NotifyPropertyChanged
- 21. DataGrid의 타격
- 22. DataGrid의 캘린더
- 23. Datagrid의 툴팁
- 24. Datagrid의 "전체"
- 25. 세로 단추 단추 너비
- 26. WPF DataGrid의 조회 ID 제어
- 27. Silverlight 컨트롤 내에서 회전 변환 후 단추 렌더링이 잘못되었습니다.
- 28. Silverlight 3 단추 클릭 이벤트 처리기에서 다른 모든 개체가 null입니까?
- 29. DataGrid의 콤보 상자
- 30. Flex DataGrid의 키보드 탐색
감사합니다. 이것은 매력처럼 작동합니다! PlusMinusToggleButtonStyle을 사용하면 문제가 발생합니다. 두 이미지를 전환하는 스타일을 만들었지 만 작동하지 않습니다. 나는 그것에 대해 별도의 질문을 게시 할 것이다. – Naresh
뻔뻔한 자기 승진 : 내 웹 사이트 [mikeherman.net] (http://mikeherman.net/blog/workarounds-for-weaker-relativesource-binding-in-silverlight-4)의 블로깅 솔루션. – foson