Инвертирование цвета в зависимости от фона окон и рабочего стола - PullRequest
1 голос
/ 21 июля 2011

У меня прозрачное окно wpf (WindowStyle="None") с черной меткой. Мне нужно, чтобы этот ярлык изменял свой цвет динамически, в зависимости от фона содержимого под моим окном (другие окна, рабочий стол), чтобы он всегда был видимым и контрастным.

Как это можно реализовать? Нужно ли делать снимок экрана и считывать значения цвета оттуда, или есть какой-то способ сделать это с помощью инструментов WPF?

Будет ли сложнее, если метка имеет градиент?

1 Ответ

1 голос
/ 21 июля 2011

Не думаю, что это вариант, чтобы текст надписи имел контрастный контур вокруг букв?

Вы можете сделать это с помощью эффекта типа тени, который использует контрастный цвет, чтобы (например), черный текст имел белую рамку.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid Background="Black">  
    <TextBlock Text="This is some text" FontSize="24" Margin="30" Foreground="Black" FontWeight="Bold">
      <TextBlock.Effect>
        <DropShadowEffect ShadowDepth="0" Opacity="1" BlurRadius="4" Color="White"/>
      </TextBlock.Effect>
    </TextBlock>
  </Grid>
</Page>

Тень не очень четко определена, но что-то вроде этого очень заметно. Код не очень красивый, но он работает. Может быть, у кого-то еще есть идея, как заставить это работать, используя встроенный эффект или что-то в этом роде.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid Background="Black">  
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="28,30" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="32,30" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="30,28" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="30,32" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="28,28" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="32,32" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="32,28" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="28,32" Foreground="White" />
    <TextBlock Text="This is some text" FontWeight="Bold" FontSize="24" Margin="30" Foreground="Black"></TextBlock>
  </Grid>
</Page>

EDIT

В MSDN есть информация о создании выделенного текста с помощью возможности WPF для преобразования текста в геометрию или простого создания форматированного текста.

...