我正在尝试在列表视图中的每个网格视图列下创建可扩展文本块。我已设法添加列表资源并创建C#事件以折叠和展开,但我有两个问题:
首先是因为我将它附加到列扩展仅适用于此列而不是整行。
其次,我不能将文本块绑定为单独的行,它始终显示为单独的列。
有没有办法让它成功呢?
XAML标记:
<ListView ItemsSource="{Binding Currents}">
<ListView.Resources>
<DataTemplate x:Key="Expandable">
<Expander Expanded="OnChange" Collapsed="OnChange" />
</DataTemplate>
<DataTemplate x:Key="Details" >
<TextBlock Text="THIS IS HIDDEN DETAILS TEST" Margin="10"/>
</DataTemplate>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Details" Width="65" CellTemplate="{StaticResource Expandable}" />
<GridViewColumn Header="From" Width="130" DisplayMemberBinding="{Binding MinTimestamp, StringFormat='dd-MM-yyyy H:mm:ss'}" />
<GridViewColumn Header="To" Width="130" DisplayMemberBinding="{Binding MaxTimestamp, StringFormat='dd-MM-yyyy H:mm:ss'}" />
<GridViewColumn Header="File" Width="377" DisplayMemberBinding="{Binding SourcePaths}" />
<GridViewColumn Header="Details" Width="65" CellTemplate="{StaticResource Details}" />
</GridView>
</ListView.View>
</ListView>
事件上的C#代码:
private void OnChange(object sender, RoutedEventArgs e)
{
for (var visible = (Visual)sender; visible != null; visible = VisualTreeHelper.GetParent(visible) as Visual)
{
if (visible.GetType() != typeof(DataGridRow)) continue;
var row = (DataGridRow)visible;
row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
break;
}
}
编辑:
它似乎适用于数据网格但现在,我缺少Extendable(缺少每行中带按钮的模板列,并且在行单击时扩展行):
<DockPanel>
<Grid>
<DataGrid AutoGenerateColumns="False" CanUserAddRows="false" ItemsSource="{Binding Currents}">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<Expander Expanded="OnChange" Collapsed="OnChange" />
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="Axm ID" Width="65" Binding="{Binding AxmId}" />
<DataGridTextColumn Header="Channel" Width="75" Binding="{Binding SrcChannel}" />
<DataGridTextColumn Header="From" Width="*" Binding="{Binding MinTimestamp, StringFormat='dd-MM-yyyy H:mm:ss'}" />
<DataGridTextColumn Header="To" Width="*" Binding="{Binding MaxTimestamp, StringFormat='dd-MM-yyyy H:mm:ss'}" />
<DataGridTextColumn Header="File" Width="*" Binding="{Binding SourcePaths}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="TEST" Margin="10" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
</DockPanel>
EDIT2:
看起来它与MahApps.Metro有关