2011-07-07 73 views
3

我对WPF来说很新,有很多东西需要学习,我想我会慢慢到达那里。我有一个DataGrid用于显示和用户输入,这是一个非常棘手的网格,因为它是整个应用程序的主要焦点。我有一些只读的列,我用CellStyle Setter将KeyboardNavigation.IsTabStop设置为False,以保持用户输入焦点在重要的列上,并且工作正常。我想让一些只读列成为显示工具提示的超链接,但没有得到关注,但我正在努力编写能够同时满足所有三项要求的XAML。WPF DataGrid超链接外观和行为

其中一列是指示行上的项目是否有任何注释。我已经使用了下面的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> 

这工作正常,但我想使它成为一个超链接相反,当用户单击单元格内容时,用户可以使用Notes做些事情。

我有另一列是一个DataGridHyperlinkColumn用于在超链接上显示一个度量单位,点击时用户可以更改单位。 (我这样做的原因,而不是一个ComboBox,例如,因为我想要用户能够更改我想要使界面的单位,这是一个非常慎重的行为来改变单位,而不是意外的事情)。下面的XAML把超链接栏上用XAML超链接列单位

  <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> 

的一个问题是,IsTabStop =假不出现工作,通过电网的互联,当我的超级链接栏仍然接收重点,不像其他专栏,我用setter来更改IsTabStop。如果推动推动我可以生活,但我宁愿不要。

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

谁能帮告诉我如何获取实现了如下的列:

  1. 超链接显示一个属性
  2. 工具提示显示不同的属性
  3. IsTabStop =假,实际上与一起使用时,超链接

在此先感谢任何人可以提供帮助。

回答

4

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

<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> 
+0

棒极了!管理把它放在我的DataGrid中的两列,整理工具提示并停止它接收焦点,它的外观和行为完全像超链接。正是我在找什么。非常感谢。 – PGibsonCoUk