代码之家  ›  专栏  ›  技术社区  ›  dharmatech

突出显示时的DataGridHyperlinkColumn文本颜色

  •  0
  • dharmatech  · 技术社区  · 7 年前

    DataGrid :

    enter image description here

    但是,请注意 DataGridHyperlinkColumn 由于链接的颜色和行的高光颜色,在选定行时不可见。

    如果可能的话,请用C代码来表示您的建议,而不是用XAML,因为这个应用程序不使用XAML。否则,一个XAML解决方案是好的;我将它转换成C#。:-)

    作为参考,下面是用于 Title 列:

    var event_setter = new EventSetter()
    {
        Event = Hyperlink.ClickEvent,
        Handler = (RoutedEventHandler)((sender, e) => 
        {
            System.Diagnostics.Process.Start((data_grid.SelectedItem as Link).Url);
        })
    };
    
    var style = new Style();
    
    style.Setters.Add(event_setter);
    
    var hyperlink_column = new DataGridHyperlinkColumn()
    {
        Header = "Title",
        Binding = new Binding("Title"),
        ElementStyle = style,
        Width = 600
    };
    
    data_grid.Columns.Add(hyperlink_column);
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   mm8    7 年前

    您可以添加一个隐式 Hyperlink DataGrid :

    const string Xaml = "<Style TargetType=\"Hyperlink\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
                        "<Style.Triggers>" +
                        "<DataTrigger Binding=\"{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridCell}}\" Value=\"True\">" +
                        "<Setter Property=\"Foreground\" Value=\"White\" />" +
                        "</DataTrigger>" +
                        "</Style.Triggers>" +
                        "</Style>";
    data_grid.Resources.Add(typeof(Hyperlink), System.Windows.Markup.XamlReader.Parse(Xaml) as Style);
    data_grid.Columns.Add(hyperlink_column);
    
        2
  •  1
  •   KalaiSelvan R    7 年前

    <DataGridHyperlinkColumn.CellStyle>
        <Style TargetType="{x:Type Hyperlink}">
            <Setter Property="Foreground" Value="Blue"/>
            <Style.Triggers>
                <Trigger Property="Selector.IsSelected" Value="True">
                    <Trigger.Setters>
                        <!--change the value for the property based on your needs-->
                        <Setter Property="Foreground" Value="Yellow"/>
                    </Trigger.Setters>
                </Trigger> 
            </Style.Triggers>
        </Style>
     </DataGridHyperlinkColumn.CellStyle>
    
        3
  •  0
  •   mm8    7 年前

    下面是@mm8提供的答案的一个版本,从XAML转换为C#:

    var data_trigger = new DataTrigger()
    {
        Binding = new Binding()
        {
            Path = new PropertyPath("IsSelected"),
            RelativeSource = new RelativeSource() { AncestorType = typeof(DataGridCell) }
        },
        Value = true
    };
    
    data_trigger.Setters.Add(new Setter(ForegroundProperty, new SolidColorBrush(Colors.White)));
    
    var style = new Style(typeof(Hyperlink));
    
    style.Triggers.Add(data_trigger);
    
    data_grid.Resources.Add(typeof(Hyperlink), style);
    
        4
  •  0
  •   mm8    7 年前

    下面是@mm8提供的答案的一个版本,它将XAML转换为C,其中使用了一些 extension methods 要避免中间变量:

    data_grid.Resources.Add(
        typeof(Hyperlink),
        new Style(typeof(Hyperlink))
        .AddTrigger(
            new DataTrigger()
            {
                Binding = new Binding()
                {
                    Path = new PropertyPath("IsSelected"),
                    RelativeSource = new RelativeSource() { AncestorType = typeof(DataGridCell) }
                },
                Value = true
            }
            .AddSetter(new Setter(ForegroundProperty, new SolidColorBrush(Colors.White)))));