gpt4 book ai didi

WPF DataGrid 超链接的外观和行为

转载 作者:行者123 更新时间:2023-12-01 01:27:47 24 4
gpt4 key购买 nike

我对 WPF 很陌生,有很多东西要学,我想我正在慢慢地到达那里。我有一个用于显示和用户输入的 DataGrid,它是一个非常棘手的 Grid,因为它是整个应用程序的主要焦点。我有一些只读的列,我使用 CellStyle Setter 将 KeyboardNavigation.IsTabStop 设置为 False 以使用户输入集中在重要的列上并且工作正常。我希望有几个只读列是显示工具提示但不接收焦点的超链接,但是我正在努力编写将同时满足所有三个要求的 XAML。

其中一列是指示行上的项目是否有任何注释。我使用以下 XAML 在 DataGridTemplateColumn 的单元格中显示 HasNotes 属性,并在工具提示上显示实际注释,在 Notes 属性中:

            <DataGridTemplateColumn x:Name="NotesColumn" Header="Notes">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding HasNotes, Mode=OneWay}">
<TextBlock.ToolTip>
<TextBlock Text="{Binding Notes}" MaxWidth="300" TextWrapping="Wrap" />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>

这工作正常,但我想将其改为超链接,以便用户在单击单元格内容时可以对注释执行某些操作。

我还有另一列是 DataGridHyperlinkColumn,用于在超链接上显示度量单位,单击时用户可以更改单位。 (我这样做的原因,而不是例如 ComboBox,是因为尽管我希望用户能够更改单位,但我希望制作界面,以便更改界面是一种非常刻意的行为单位,而不是可以意外完成的事情)。以下 XAML 将超链接列置于 Unit
            <DataGridHyperlinkColumn x:Name="ResultUnitLink" Binding="{Binding Path=Unit.Code}" Header="Unit" Width="Auto" IsReadOnly="True">
<DataGridHyperlinkColumn.CellStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
</Style>
</DataGridHyperlinkColumn.CellStyle>
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="ChangeUnit" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>

Hyperlink 列的 XAML 的一个问题是 IsTabStop = False 似乎不起作用,在通过 Grid 切换时,我的超链接列仍然获得焦点,这与我使用 setter 更改 IsTabStop 的其他列不同。如果迫不得已,我可以忍受,但我宁愿不这样做。

我从这两列中真正想要的是两种外观/行为的合并,即数据显示在超链接上的列,其中 TabStop = False 并且在悬停时显示不同属性的工具提示。

任何人都可以帮助我建议如何获得实现以下目标的列:
  • 显示一个属性的超链接
  • 显示不同属性的工具提示
  • IsTabStop = False 与超链接一起使用时实际有效

  • 提前感谢任何可以提供帮助的人。

    最佳答案

    过去我遇到过超链接的问题,所以使用我用于标签或按钮的样式使它们看起来像超链接。尝试将您的列模板制作为按钮或标签并应用此样式。

    <Style x:Key="ButtonAsLinkStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type Button}">
    <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ContentPresenter ContentStringFormat="{TemplateBinding ContentStringFormat}" />
    </TextBlock>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Foreground" Value="Red" />
    </Trigger>
    </Style.Triggers>
    </Style>

    关于WPF DataGrid 超链接的外观和行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610778/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com