Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
.NET 6

Перенос текста в кнопке при использовании сторонней библиотеки

09.10.2022, 14:39. Показов 1090. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня был стиль, который определял вид кнопки и, самое главное, обеспечивал перенос строки внутри кнопки:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <Grid.Resources>
            <Style TargetType="Button" >
                <Setter Property="Background" Value="#BED5E8"/>
                <Setter Property="Foreground" Value="#19001F"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Height" Value="145"/>
                <Setter Property="Margin" Value="5"/>
                <Style.Resources>
                    <DataTemplate DataType="{x:Type sys:String}" xmlns:sys="clr-namespace:System;assembly=mscorlib">
                        <TextBlock Text="{Binding}" TextWrapping="Wrap" TextAlignment="Center"/>
                    </DataTemplate>
                </Style.Resources>
            </Style>
        </Grid.Resources>
 
   ...
 
      <Button Content="ButtonButtonButtonButtonButtonButtonButtonButton" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="136"/>
Работало всё хорошо.

Но теперь я решил поэкспериментировать с UI библиотекой HandyControls.
Мой шаблон теперь выглядит так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Grid.Resources>
            <Style TargetType="Button" BasedOn="{StaticResource ButtonInfo}" >
                <Setter Property="Background" Value="#BED5E8"/>
                <Setter Property="Foreground" Value="#19001F"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Height" Value="145"/>
                <Setter Property="Margin" Value="5"/>
                <Style.Resources>
                    <DataTemplate DataType="{x:Type sys:String}" xmlns:sys="clr-namespace:System;assembly=mscorlib">
                        <TextBlock Text="{Binding}" TextWrapping="Wrap" TextAlignment="Center"/>
                    </DataTemplate>
                </Style.Resources>
            </Style>
        </Grid.Resources>
И всё работает хорошо, кроме самого главного - текст не переносится, а ТекстБлок растягивается за пределы кнопки

Перепробовал всё что вспомнил, но заставить ТекстБлок ужиматься так и не вышло. Единственный вариант, который я нашел - жестко прописать ширину ТекстБлока, и тогда да, текст уже отображается нормально с переносом. Но в моём случае это совсем не вариант.

Понимаю, что библиотека сторонняя и там может быть всё что угодно, но у кого-то есть хотя бы мысли на этот счёт, в каком направлении двигаться?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2022, 14:39
Ответы с готовыми решениями:

Перенос текста в кнопке
Создаю кнопки динамически. Пытаюсь сделать, чтобы текст в кнопке переносился. В xaml в windows.resurs определяю стиль для кнопки: ...

Перенос текста в кнопке
Всем доброго дня! Как написать этот текст в кнопке в 2 строки? Чтоб дата была вверху, а &quot;Записи нет&quot; - внизу. А то сейчас всё в...

Перенос текста в кнопке хтмл
Скажите, как перенести текст на др. строку в кнопке хтмл? К примеру написал такое: &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD...

8
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
09.10.2022, 14:40  [ТС]
Полный код окна:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
        xmlns:ui="http://schemas.modernwpf.com/2019"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        ui:WindowHelper.UseModernWindowStyle="True"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!--<Button Content="Button" Background="#BED5E8" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
        <Border CornerRadius="5" SnapsToDevicePixels="True" BorderBrush="SteelBlue" BorderThickness="1" Margin="10,55,0,0" VerticalAlignment="Top" Width="147" HorizontalAlignment="Left">
            <mah:NumericUpDown  Maximum="100" Minimum="10" HideUpDownButtons="True" FontSize="14"/>
        </Border>-->
 
        <Grid.Resources>
            <Style TargetType="Button" BasedOn="{StaticResource ButtonInfo}" >
                <Setter Property="Background" Value="#BED5E8"/>
                <Setter Property="Foreground" Value="#19001F"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Height" Value="145"/>
                <Setter Property="Margin" Value="5"/>
                <Style.Resources>
                    <DataTemplate DataType="{x:Type sys:String}" xmlns:sys="clr-namespace:System;assembly=mscorlib">
                        <TextBlock Text="{Binding}" TextWrapping="Wrap" TextAlignment="Center"/>
                    </DataTemplate>
                </Style.Resources>
            </Style>
        </Grid.Resources>
 
        <Button Content="ButtonButtonButtonButtonButtonButtonButtonButton" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="136"/>
 
 
 
    </Grid>
 
</Window>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,084
Записей в блоге: 2
09.10.2022, 18:33
Rhoxolan, попробуйте так:
XML
19
20
21
22
23
24
25
26
27
28
29
30
31
        <Grid.Resources>
            <DataTemplate x:Key="buttton.ContentTemplate">
                <TextBlock Text="{Binding}" TextWrapping="Wrap" TextAlignment="Center"/>
            </DataTemplate>
            <Style TargetType="Button" BasedOn="{StaticResource ButtonInfo}" >
                <Setter Property="Background" Value="#BED5E8"/>
                <Setter Property="Foreground" Value="#19001F"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Height" Value="145"/>
                <Setter Property="Margin" Value="5"/>
                <Setter Property="ContentTemplate" Value="{DynamicResource buttton.ContentTemplate}"/>
            </Style>
        </Grid.Resources>
0
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
09.10.2022, 20:35  [ТС]
Элд Хасп, эффект тот же, ничего не меняется

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
 
        <Grid.Resources>
            
            <DataTemplate x:Key="buttton.ContentTemplate">
                <TextBlock Text="{Binding}" TextWrapping="Wrap" TextAlignment="Center"/>
            </DataTemplate>
            
            <Style TargetType="Button" BasedOn="{StaticResource ButtonInfo}" >
                <Setter Property="Background" Value="#BED5E8"/>
                <Setter Property="Foreground" Value="#19001F"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Height" Value="145"/>
                <Setter Property="Margin" Value="5"/>
                <Setter Property="ContentTemplate" Value="{DynamicResource buttton.ContentTemplate}"/>
            </Style>
        </Grid.Resources>
 
        <Button Content="ButtonButtonButtonButtonButtonButtonButtonButton" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="136"/>
 
    </Grid>
 
</Window>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,084
Записей в блоге: 2
09.10.2022, 20:41
Цитата Сообщение от Rhoxolan Посмотреть сообщение
эффект тот же, ничего не меняется
Надо смотреть что за шаблон объявлен в стиле ButtonInfo.
0
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
09.10.2022, 21:05  [ТС]
Честно говоря, я не знаю, могу ли я посмотреть шаблон стиля ButtonInfo прямо у себя в VS, но я полазил в репозитории HandyControls, и нашел следующее:

XML
1
2
3
4
<Style x:Key="ButtonInfo" BasedOn="{StaticResource ButtonBaseStyle}" TargetType="Button">
        <Setter Property="Background" Value="{DynamicResource InfoBrush}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource InfoBrush}"/>
    </Style>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<Style x:Key="ButtonBaseStyle" BasedOn="{StaticResource ButtonBaseBaseStyle}" TargetType="Button">
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Background" Value="{DynamicResource RegionBrush}"/>
        <Setter Property="hc:BorderElement.CornerRadius" Value="{StaticResource DefaultCornerRadius}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <hc:SimplePanel>
                        <Border Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}"/>
                        <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}">
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}">
                                <Path x:Name="PathMain" Width="{TemplateBinding hc:IconElement.Width}" Height="{TemplateBinding hc:IconElement.Height}" Fill="{TemplateBinding Foreground}" SnapsToDevicePixels="True" Stretch="Uniform" Data="{TemplateBinding hc:IconElement.Geometry}"/>
                                <ContentPresenter x:Name="ContentPresenterMain" RecognizesAccessKey="True" VerticalAlignment="Center" Margin="6,0,0,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </StackPanel>
                        </Border>
                    </hc:SimplePanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Content" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed" TargetName="ContentPresenterMain"/>
                        </Trigger>
                        <Trigger Property="hc:IconElement.Geometry" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed" TargetName="PathMain"/>
                            <Setter Property="Margin" Value="0" TargetName="ContentPresenterMain"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Opacity" Value=".9"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Opacity" Value=".6"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.4"/>
            </Trigger>
        </Style.Triggers>
    </Style>
XML
1
2
3
4
5
6
7
8
9
10
11
<Style x:Key="ButtonBaseBaseStyle" BasedOn="{StaticResource BaseStyle}" TargetType="ButtonBase">
        <Setter Property="Height" Value="{StaticResource DefaultControlHeight}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
        <Setter Property="Padding" Value="{StaticResource DefaultControlPadding}"/>
        <Setter Property="Foreground" Value="{DynamicResource TextIconBrush}"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>
XML
1
2
3
4
5
<Style x:Key="BaseStyle" TargetType="Control">
        <Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
        <Setter Property="FontSize" Value="{StaticResource TextFontSize}"/>
        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
    </Style>
И, честно говоря, не уверен, что то, что я нашел, это то, что нужно. Но пытаюсь пока разобраться.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,084
Записей в блоге: 2
09.10.2022, 22:44
Rhoxolan, я не вижу здесь "криминала".
Вроде должно работать как всегда.
Нужно глубже вникать и дебажить.
1
 Аватар для Rhoxolan
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
09.10.2022, 23:38  [ТС]
Элд Хасп, Понял вас, спасибо.

Не по теме:


Вопрос, конечно, не по теме, но не могу не воспользоваться ситуацией и не спросить.

В документации к этой HandyControls в описании стилей всегда пишут что стиль по умолчанию не рекомендуется для прямого использования и нужно использовать как BasedOn. Например, про CheckBox:

The default style of the checkbox is not recommended for direct use and should always be used by other styles in the BasedOn mode.

То есть, они мне настоятельно рекомендуют, чтобы я на базе их дефолтных стилей создавал свои, например так (очень упрощенно)? Я правильно это понял?
XML
1
2
3
<Style TargetType="CheckBox" BasedOn="{StaticResource CheckBoxBaseStyle}">
    <Setter Property="FontSize" Value="12.5"></Setter>
</Style>

0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,084
Записей в блоге: 2
10.10.2022, 08:58
Цитата Сообщение от Rhoxolan Посмотреть сообщение
Я правильно это понял?
Да, правильно в данном случае.
Их стили, скорее всего, подключаются через словари в App, а не через тему.
Если не задавать BasedOn, то за основу будет браться стиль темы.

Добавлено через 6 минут
Rhoxolan, я вот думаю, может hc:SimplePanelвносит какие-то искажения.
Попробуйте заменить шаблон на простейший и потом потихоньку его усложнять - возможно сможете поймать момент где прерывается связь ContentPresenter со свойствами Button:
XML
5
6
7
8
9
10
11
12
13
14
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                                <ContentPresenter
                                    RecognizesAccessKey="True"
                                    VerticalAlignment="Center"
                                    Margin="6,0,0,0"
                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </ControlTemplate>
            </Setter.Value>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2022, 08:58
Помогаю со студенческими работами здесь

.NET 4.x Перенос текста в кнопке
Приветствую всех. На форме квадратная кнопка и заголовок кнопки из трех слов. Заголовок не влезает на кнопку по ширине и ложится в одну...

Ошибка при использовании библиотеки
Traceback (most recent call last): File &quot;*путь файла*&quot;, line 1, in &lt;module&gt; from PIL import Image ModuleNotFoundError: No...

Почему при нажатии кнопки при использовании библиотеки createjs функция запускается несколько раз?
Здравствуйте, на creatjs делаю переключения между уровнями. Когда нажимаю на кнопку то уровень очищается и появляются новые объекты, щелкаю...

Ошибка при использовании библиотеки getch
У меня ошибка при использовании библиотеки getch Ввожу: import getch print(getch.getch()) Вывод:

Ошибка при использовании пользовательской библиотеки
Уважаемые программисты, помогите найти причину ошибки! float a,b,c; int i,n,j; #include&lt;stdio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru