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,请考虑 Button
的 Text
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 运算符
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,请考虑 Button
的 Text
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 运算符