В стиле ToggleSwitch OffContentPresenter и OnContentPresenter представляют OffContent и OnContent, вы можете добавить TextWrapping для переноса содержимого и установить ширину, чтобы ограничить его ширину. Что касается полного стиля, вы можете перейти к generic.xaml, чтобы скопировать его.
.xaml:
<Style x:Key="ToggleSwitchStyle1" TargetType="ToggleSwitch">
......
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleSwitch">
<Grid Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{TemplateBinding CornerRadius}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups>
......
</VisualStateManager.VisualStateGroups>
<ContentPresenter x:Name="HeaderContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Foreground="{ThemeResource ToggleSwitchHeaderForeground}" IsHitTestVisible="False" Margin="{ThemeResource ToggleSwitchTopHeaderMargin}" Grid.Row="0" TextWrapping="Wrap" VerticalAlignment="Top" Visibility="Collapsed" x:DeferLoadStrategy="Lazy"/>
<Grid HorizontalAlignment="Left" MinWidth="{StaticResource ToggleSwitchThemeMinWidth}" Grid.Row="1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition MaxWidth="12" Width="12"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="{ThemeResource ToggleSwitchPreContentMargin}"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="{ThemeResource ToggleSwitchPostContentMargin}"/>
</Grid.RowDefinitions>
<Grid x:Name="SwitchAreaGrid" Background="{ThemeResource ToggleSwitchContainerBackground}" Grid.ColumnSpan="3" Control.IsTemplateFocusTarget="True" Margin="0,5" Grid.RowSpan="3"/>
<ContentPresenter TextWrapping="Wrap" Width="100" x:Name="OffContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding OffContentTemplate}" Content="{TemplateBinding OffContent}" Grid.Column="2" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="False" Opacity="0" Grid.RowSpan="3" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<ContentPresenter TextWrapping="Wrap" Width="100" x:Name="OnContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding OnContentTemplate}" Content="{TemplateBinding OnContent}" Grid.Column="2" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="False" Opacity="0" Grid.RowSpan="3" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
......
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Или вы также можете поместить TextBlock в свойства OnContent и OffContent ToggleSwitch, чтобы добиться этого.
<ToggleSwitch Width="200" Grid.Row="2" Grid.Column="0" x:Name="SomeToggle"
Header="Some header" >
<ToggleSwitch.OffContent>
<TextBlock Width="100" TextWrapping="Wrap">Off content to verify if string is wrapped</TextBlock>
</ToggleSwitch.OffContent>
</ToggleSwitch>
Обновление:
Если вы не хотите, чтобы Width ограничивала ширину напрямую, вы можете изменить ColumnDefinition с «Auto» на «*». «Авто» означает, что столбцу дается такая ширина, какая требуется элементам внутри него. Но «*» основан на ширине оставшегося пространства. Поэтому, когда вы устанавливаете ColumnDefinition на « * », он размещает ваш текст в соответствии с оставшимся пространством и переносит его, если его недостаточно.
Часть стиля, которую необходимо изменить (вам просто нужно изменить следующую часть исходного стиля):
<Grid HorizontalAlignment="Left" MinWidth="{StaticResource ToggleSwitchThemeMinWidth}" Grid.Row="1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition MaxWidth="12" Width="12"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
......
</Grid>
Использование:
<ToggleSwitch
Grid.Row="2"
Grid.Column="0"
x:Name="SomeToggle"
Header="Some header"
OffContent="Off content to verify if string is wrapped"
OnContent="On content to verify if string is wrapped"
OffContentTemplate="{StaticResource ToggleSwitchTextBlockTemplate}"
OnContentTemplate="{StaticResource ToggleSwitchTextBlockTemplate}"
Style="{StaticResource ToggleSwitchStyle1}"
Width="200" />
person
Faywang - MSFT
schedule
16.12.2019