Xamarin.Forms 按钮内的 TextBlock。文本的自定义换行

Xamarin.Forms TextBlock within button. Custom wrapping of a text

Xamarin.FormsXAML。按钮上的文本错误地移到新行。我需要制作它以便我可以配置包装。尝试这样做:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SaleAgent.MainPage"
Title = "Торговый агент">
    <ContentPage.Resources>

        <Style x:Key="buttonStyle" TargetType="{x:Type Button}">
            <Setter Property="FontSize" Value="Small" />

            <Setter Property="Template">
                    <Setter.Value>
                    <TextBlock></TextBlock> 
                    </Setter.Value>
                </Setter>

        </Style>
    </ContentPage.Resources>
    <ContentPage.Content>
        <Grid x:Name="mainGrid" RowSpacing="1" ColumnSpacing="1">
        <Grid.RowDefinitions>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
        </Grid.ColumnDefinitions>
            <Button Grid.Row="1" Grid.Column="1" Grid.RowSpan="3" Style="{StaticResource buttonStyle}"/>  
        </Grid>
    </ContentPage.Content>
</ContentPage>

但是 TextBlock 给我错误:

XLS0414 The type 'TextBlock' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built

您正在使用 WPF/UWP XAML。 Xamarin 不支持它。在这里回答它们之间的区别超出了范围,你应该学习它。

但要回答您的问题(这不是上面代码中的唯一问题),Xamarin 中没有 TextBlock,而是 Label。但这对您的工作没有帮助,因为上面使用的完整逻辑存在缺陷。

正如 Iavn 指出的那样,没有 Template API 或任何其他 API (Button API docs) 可以将自定义视图添加到 Xamarin 中的按钮。 Xamarin 中也不存在 TextBlock

由于您仅添加 TextBlock,请考虑 ButtonText API。

<Button
    Text="The Text you want"
    FontSize="Small"/>

要将自定义视图用作按钮,您可以使用 TapGestureRecogniser。 TapGesture 可以添加到 Xamarin 中的任何视图。

    <Label
        Text="Some text">
        <Label.GestureRecognizers>
            <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
        </Label.GestureRecognizers>
    </Label>

比我想的更简单。文本必须在 cs 文件中设置,而不是在 XAML 中。示例:在 Контрагент 之前 - ы 在 Контра - генты 之后。 有一个代码:

`

public MainPage()
        {
            InitializeComponent();
            ButtonContragent.Text = "Контра\nгенты";
        }

`

在 XAML 中我无法使用 \n 运算符