1

我正在显示在 WPF DataGrid 上分组的行

我当前显示的 Group Header 是一个 TextBlock,TextBlock 上显示的文本是不可选的。

如何使 TextBlock 文本可选,以便我可以复制该值。

以下是 XAML。

我正在使用以下代码将数据绑定到网格并对数据进行分组。

实体:

public class AverageCounter
{
    public string CounterName { get; set; }
    public string Role { get; set; }
    public string RoleInstance { get; set; }
    public decimal CounterAverageValue { get; set; }
}

绑定和分组的代码。

var results = new ListCollectionView(queryResultSet);

if (results.GroupDescriptions != null)
{
    results.GroupDescriptions.Add(new PropertyGroupDescription("CounterName"));
}

dataGrid1.AutoGenerateColumns = true;
dataGrid1.ItemsSource = results;

XAML:

<Window x:Class="CheckPerfromanceCounters.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:CheckPerfromanceCounters"
        Title="MainWindow" Height="390" Width="878">
    <Window.Resources>
        <local:AvgConverter x:Key="avgConverter"/>
    </Window.Resources>
    <Grid>

        <Button Content="Refresh" Height="23" HorizontalAlignment="Left" Margin="769,328,0,0" Name="button1"
            VerticalAlignment="Top" Width="75" Click="Button1Click" />
        <DataGrid AutoGenerateColumns="True" Height="310" HorizontalAlignment="Left" Margin="12,12,0,0"
              Name="dataGrid1" VerticalAlignment="Top" Width="832">
            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Path=CounterName}" />
                            </StackPanel>
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander>
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Path=Name}" FontStyle="Italic"/>

                                                    <TextBlock><Bold> - Average: </Bold></TextBlock>
                                                    <TextBlock Text="{Binding Converter={StaticResource avgConverter}}" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>

        </DataGrid>

    </Grid>
</Window>

如果您需要任何其他信息,请告诉我。

4

2 回答 2

3

只需使用 TextBox 并将其设为只读,然后您可以更改 TextBox.Style 使其看起来像 TextBlock。

也许像这样

<TextBox IsReadOnly="True" 
         BorderThickness="0" 
         Background="Transparent" 
         TextWrapping="Wrap" />
于 2012-07-11T06:25:58.910 回答
0

使用 TextBox 并IsReadOnly ="True"同时将绑定模式设置为 oneWay :

Text="{Binding Converter={StaticResource avgConverter}, Mode=OneWay}"

于 2012-07-11T11:35:04.433 回答