1

我发现了几篇关于在 SL3 和 SL4 中实现展开/折叠的文章,这些文章实际上是缺少“祖先相对源绑定”的解决方法。所以现在 SL5 出来了,我想知道这是如何在 SL5 中完成的。

这是 SL4 的答案: Silverlight DataGrid 中的展开/折叠按钮

4

1 回答 1

2

使用 SL5 RelativeSource很容易做到:

<sdk:DataGrid ItemsSource="{Binding Items}" 
   AutoGenerateColumns="False" 
   RowDetailsVisibilityMode="Collapsed">
   <sdk:DataGrid.Resources>
     <SL5:VisibilityToBoolConverter x:Key="converter"/>
   </sdk:DataGrid.Resources>
   <sdk:DataGrid.Columns>
      <sdk:DataGridTemplateColumn>
         <sdk:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
              <ToggleButton Content="Expand" 
                  IsChecked="{Binding Path=DetailsVisibility, 
                  Mode=TwoWay, 
                  RelativeSource={RelativeSource AncestorType=sdk:DataGridRow},
                  Converter={StaticResource converter}}"/>
            </DataTemplate>
          </sdk:DataGridTemplateColumn.CellTemplate>
       </sdk:DataGridTemplateColumn>
   </sdk:DataGrid.Columns>
</sdk:DataGrid>

但是您需要一个VisibitytoBoolean转换器才能使其工作:

public class VisibilityToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        Visibility visibility = (Visibility)value;
        return (visibility == Visibility.Visible);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        bool visibility = (bool)value;
        return visibility ? Visibility.Visible : Visibility.Collapsed;
    }
}
于 2012-01-08T14:00:01.077 回答