Den*_*ard 5 datagrid nested silverlight-3.0
我正在使用silverlight 3数据网格,在其中,我通过使用rowdetails(visibilitymode = visiblewhenselected)将相关记录嵌套在另一个控件中.
我真的很喜欢它的工作方式,但是当按下"+"按钮时,我更倾向于让网格显示行详细信息,就像单击节点时树会展开一样.
我尝试使用以下资源以编程方式定义模板:
<Grid.Resources>
<DataTemplate x:Key="EmptyTemplate">
<StackPanel>
<!--<TextBlock Text="Empty Template!!!" />-->
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SongTemplate">
<StackPanel>
<AdminControls:ArtistSongControl x:Name="ArtistSongControl" />
</Stack>
</DataTemplate>
</Grid.Resources>
Run Code Online (Sandbox Code Playgroud)
在网格的LoadingRowDetails事件中,我将选择要设置的模板:
e.Row.DetailsTemplate = (DataTemplate)LayoutRoot.Resources["SongTemplate"];
Run Code Online (Sandbox Code Playgroud)
这种方式有效,但我发现我在折叠前一行细节模板时遇到了问题,甚至崩溃了ie8(不确定是否相关).
基本上,我真的很喜欢silverlight 3 datagrid的工作原理,甚至是如何实现rowdetailstemplate的东西.我只是想延迟加载任何细节,直到有意地扩展一行(如树一样).所有的第三方网格似乎都是这样做的,而微软的网格太紧密了.有谁知道如何解决这个问题?
谢谢,丹尼斯
小智 6
丹尼斯,
如果你还没有已经找到一个答案,我想相同的行为,并通过自定义RowHeaderTemplate,它可以让你在每行的头扔一个按钮解决了这个问题.然后我为按钮实现了一个处理程序,如下所示:
private void ToggleButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
ToggleButton button = sender as ToggleButton;
DataGridRow row = button.GetVisualAncestorOfType<DataGridRow>();
if (button.IsChecked == true)
{
row.DetailsVisibility = Visibility.Visible;
//Hide any already expanded row. We only want one expanded at a time for simplicity and
//because it masks a virtualization bug in the datagrid.
if (_expandedRow != null)
_expandedRow.DetailsVisibility = Visibility.Collapsed;
_expandedRow = row;
}
else
{
row.DetailsVisibility = Visibility.Collapsed;
_expandedRow = null;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,GetVisualAncestorOfType <>是我实现的扩展方法,用于挖掘可视化树.
您还需要将datagrid的HeadersVisibility属性设置为Row或All