使用WPF扩展List.View和GridView中的TextBlock属性

时间:2018-01-25 09:41:52

标签: c# wpf xaml gridview

我正在尝试在列表视图中的每个网格视图列下创建可扩展文本块。我已设法添加列表资源并创建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有关

0 个答案:

没有答案