【问题标题】:How to make TextBlock Text Selectable on a WPF DataGrid Group Header or Anyother way to do it如何在 WPF DataGrid 组标题或任何其他方式上使 TextBlock 文本可选
【发布时间】:2012-07-11 06:19:46
【问题描述】:

我正在显示在 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>

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

【问题讨论】:

    标签: c# wpf xaml wpfdatagrid


    【解决方案1】:

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

    大概是这样的

    <TextBox IsReadOnly="True" 
             BorderThickness="0" 
             Background="Transparent" 
             TextWrapping="Wrap" />
    

    【讨论】:

    • &lt;TextBox IsReadOnly="True" Text="{Binding Converter={StaticResource avgConverter}}" BorderThickness="0" Background="Transparent" TextWrapping="Wrap" /&gt; 我已经尝试了上面的代码,但是它抛出了 XAML Parse 异常,而不是我试图动态显示的静态文本。
    • ' 在 System.Threading.ThreadHelper.ThreadStart() InnerException: System.InvalidOperationException Message=双向绑定需要 Path 或 XPath。 Source=PresentationFramework'
    • @srinivasrao 这是与 OP 问题不同的问题 - 您需要修复您的 {Binding Converter={StaticResource avgConverter}} 并查看您需要提供 Path 的错误。
    • 也许{Binding Path=CounterName, Converter={StaticResource avgConverter}}
    【解决方案2】:

    将 TextBox 与 IsReadOnly ="True" 一起使用,但也将绑定模式设置为 oneWay :

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

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多