WPF. Часть текста Title изменить шрифт на Bold

162
05 апреля 2018, 11:45

У формы есть заголовок окна Title. Мне нужно назвать приложение например: Приложение организации Тест, слово тест выделить жирным.
Приложение организации Тест
Каким образом такое можно сделать? Знаю если бы нужно было сделать для Label такое, то не проблема, Textblock в нем добавляем Inlin'ы и присваиваем Label то что получилось. Но в Title такое не прокатывает. Может кто сталкивался?

Answer 1

Неклиентскую область окна можно изменить применив нестандартный WindowChrome, например это может выглядеть как-то так:

<Window ...>
    <WindowChrome.WindowChrome>
        <!--Меняем WindowChrome-->
        <WindowChrome GlassFrameThickness="{x:Static WindowChrome.GlassFrameCompleteThickness}"/>
    </WindowChrome.WindowChrome>
    <Window.Template>
        <!--Меняем шаблон окна-->
        <ControlTemplate TargetType="c:MainWindow">
            <Grid SnapsToDevicePixels="True">
                <Grid.RowDefinitions>
                    <!--Одна строка для заголовка-->
                    <RowDefinition Height="Auto"/>
                    <!--Одна для контента-->
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <!--Заголовок-->
                <StackPanel Orientation="Horizontal" Margin="7,7,7,0">
                    <!--Вернем иконку на место-->
                    <Image Source="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" 
                           Width="16" Height="16" Margin="0,0,4,0"/>
                    <!--Собственно текст заголовка, теперь его нужно редактировать здесь-->
                    <TextBlock VerticalAlignment="Center">
                        Special for <Run FontWeight="Bold">stackoverflow</Run>
                    </TextBlock>
                </StackPanel>
                <!--Контент будет вставляться сюда-->
                <Border Grid.Row="1" Margin="7" BorderBrush="Black"
                        BorderThickness="1" Background="{TemplateBinding Background}">
                    <ContentPresenter Content="{TemplateBinding Content}"/>
                </Border>
            </Grid>
        </ControlTemplate>
    </Window.Template>
    <!--Ну а здесь уже идет обычный контент, который вы помещаете в окно-->
    <Grid Margin="5">
        <TextBlock Text="Some text"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"/>
    </Grid>
</Window>

Ответ подготовлен на основании этого мануала: https://blogs.msdn.microsoft.com/wpfsdk/2010/08/25/experiments-with-windowchrome/

WindowChrome начиная с .NET 4.5 часть PresentationFramework.dll, поэтому подключать дополнительно ничего не требуется.

READ ALSO
Получение данных во View через Ajax Asp MVC

Получение данных во View через Ajax Asp MVC

Не могу понять как перехватить данные во View Asp net с помощью ajax Есть вот такой метод он выводит во View Json данные

217
Запросить windows авторизацию

Запросить windows авторизацию

Я хочу запросить ввод пароля пользователя, когда он нажимает на кнопкуМожете подсказать метод, который вызовет стандартное диалоговое окно...

157
В C# после десериализации JSON свойство равно Null

В C# после десериализации JSON свойство равно Null

Всем приветДесериализовал JSON, но почему-то при попытке вывести какие-либо значения, получаю либо Null, либо исключение

171
Загрузка/удаление записей из базы и вывод в WPF

Загрузка/удаление записей из базы и вывод в WPF

Есть база данныхДержать все записи в памяти очень ресурсно затратно

140