Цвет текста DataGridHyperlinkColumn при выделении - PullRequest
1 голос
/ 05 апреля 2019

У меня есть простое приложение WPF, которое отображает ссылки reddit в 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);

Ответы [ 4 ]

2 голосов
/ 05 апреля 2019

Вы можете добавить неявный стиль 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);
1 голос
/ 05 апреля 2019

Может использоваться свойство Selector.IsSelected столбца DataGridHyperLink, и при изменении выбора определенного элемента стиль можно обновить с помощью триггера.

<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>
0 голосов
/ 07 апреля 2019

Вот вариант ответа, предоставленного @ mm8, преобразованного из XAML в C #, который использует некоторые методы расширения , чтобы избежать промежуточных переменных:

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)))));
0 голосов
/ 07 апреля 2019

Вот вариант ответа, предоставленного @ 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...