создать такой же эффект для текста, как заголовок окна - PullRequest
0 голосов
/ 26 марта 2012

Я создаю прозрачное окно с другим текстовым блоком, но мой текст не всегда читается, потому что это зависит от цвета окна пользователя.

Итак, я хочу применить такой же эффект к тексту, как эффект окна заголовка, Это как белая тень.

Спасибо

1 Ответ

0 голосов
/ 28 марта 2012

Лучший способ сделать это - использовать эффект шейдера. Я пытался сделать это с помощью встроенного эффекта размытия, но, похоже, они не сочетаются с альфой.

Ниже приведен пример того, как я начал бы, и я не представляю конечный продукт. Эффект границы HLSL, основанный на эффекте тиснения. Example HLSL effect for glass with blending

Просмотр полного изображения для лучшего понимания. Этот эффект добавляет только границу размером 2 пикселя, поэтому при масштабировании он выглядит еще хуже.

Я довольно плохо пишу HLSL, код справа просто скопирован из http://brooknovak.wordpress.com/2008/09/16/simple-image-filters-written-as-hlsl-pixel-shaders/ с модификацией.

Я уверен, что кто-то, кто знал HLSL / GLSL, мог бы написать эффект размытия, который работает правильно. Обратите внимание, что этот эффект работает для всего изображения и, следовательно, должен знать размер изображения. Вы должны поместить их в постоянный буфер и использовать их вместо жестко заданных 500.0 для ширины и высоты. Они должны быть шириной / высотой отображаемого объекта. В моем примере это фактически вся левая половина окна, а не только размер текста, потому что мой XAML выглядит следующим образом ...

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Loaded="Window_Loaded" Background="Transparent">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="264*" />
            <ColumnDefinition Width="239*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="218*" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Text="The quick brown fox jumped over the lazy dog." Foreground="White" Background="Transparent" Grid.RowSpan="3" x:Name="PART_TextBlock"/>
        <TextBox x:Name="PART_TextBox" Grid.Column="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible" AcceptsReturn="True" AcceptsTab="True" />
        <TextBlock x:Name="PART_Error" Grid.Column="1" Grid.Row="1"/>
        <Button Content="Compile &amp; Apply" Grid.Column="1" Grid.Row="2" Padding="4,1" Margin="4" HorizontalAlignment="Center" Click="Button_Click" />
    </Grid>
</Window>
...