Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# String.Format在Xamarin.Forms中没有提供正确的字符串_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# String.Format在Xamarin.Forms中没有提供正确的字符串

C# String.Format在Xamarin.Forms中没有提供正确的字符串,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我想以标签格式显示文本,但显示的值不正确 它在调试模式下显示正确的值。但它在屏幕上显示错误。理想情况下,屏幕应将总计和小计显示为图像一 格式化字符串的代码 string paymentFormat = "{0,-25} {1,8}\n"; string paymentMode = "Total"; // Or Subtotal string paymentAmount = "604.00"; string test = string.Format(paymentFormat, paymen

我想以标签格式显示文本,但显示的值不正确

它在调试模式下显示正确的值。但它在屏幕上显示错误。理想情况下,屏幕应将总计和小计显示为图像一

格式化字符串的代码

string paymentFormat = "{0,-25} {1,8}\n";
string paymentMode = "Total"; // Or Subtotal
string paymentAmount = "604.00";

string test = string.Format(paymentFormat, paymentMode, paymentAmount);
更新

public class AlertPopupViewItem : ContentView
{
    Label HeaderLabel,MessageLabel;
    public Button OKButton, CancelButton;
    AbsoluteLayout _overlay;
    LoggerService logservice;
    public bool ButtonValue = false;
    StackLayout CancelStackLayout, OKStackLayout;
    string PageSource = string.Empty;

    public AlertPopupViewItem()
    {
        logservice = new LoggerService();
        logservice.WriteData(Constants.DEBUG_LOGGING, "Alert Message Popup ctor.. Start");

        _overlay = new AbsoluteLayout
        {
            BackgroundColor = Color.Black.MultiplyAlpha(0.5),
            HorizontalOptions = LayoutOptions.Fill,
            VerticalOptions = LayoutOptions.Fill,
        };

        Grid mainGrid = new Grid
        {
            HeightRequest = 40,
            BackgroundColor = Color.White,
            Padding = 20,
            RowDefinitions =
            {

                new RowDefinition { Height = new GridLength(15, GridUnitType.Star) },//0 Title
                new RowDefinition { Height = new GridLength(3, GridUnitType.Star) },//1 Line
                new RowDefinition { Height = new GridLength(80, GridUnitType.Star) },//2 Message
                new RowDefinition { Height = new GridLength(12, GridUnitType.Star) },//3 OK-Cancel
            }
        };

        HeaderLabel = new Label
        {
            FontAttributes = FontAttributes.Bold,
            FontSize = 22,
            TextColor = Color.Black,
            HorizontalTextAlignment= TextAlignment.Center,
            VerticalTextAlignment = TextAlignment.Center,
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions =LayoutOptions.CenterAndExpand
        };


        BoxView divider = new BoxView
        {
            HeightRequest = 1,
            Color = Color.Gray,
            VerticalOptions = LayoutOptions.End,
        };



        MessageLabel = new Label
        {
            FontAttributes = FontAttributes.None,
            FontSize = 13,
            HorizontalTextAlignment = TextAlignment.Start,
            VerticalTextAlignment = TextAlignment.Center,
            HorizontalOptions = LayoutOptions.StartAndExpand,
            TextColor = Color.Black
        };

        ScrollView scroll = new ScrollView()
        {
            Orientation = ScrollOrientation.Vertical
        };

        scroll.Content = MessageLabel;

        Grid ButtonGrid = new Grid
        {

            HeightRequest = 35,
            ColumnDefinitions =
            {
                new ColumnDefinition {Width=new GridLength(58,GridUnitType.Star) },
                new ColumnDefinition {Width=new GridLength(20,GridUnitType.Star) },
                new ColumnDefinition {Width=new GridLength(2,GridUnitType.Star) },
                new ColumnDefinition {Width=new GridLength(20,GridUnitType.Star) }
            }
        };


        CancelStackLayout = new StackLayout
        {
            Padding = new Thickness(-6, -6, -6, -6),
            //VerticalOptions = LayoutOptions.Center,
            BackgroundColor = Color.FromHex("#ff9500")
        };

        CancelButton = new Button
        {
            TextColor = Color.White,
            FontSize = 15,
            BorderRadius = 0,
            Text = Localizer.Localize("CancelSmall"),
            BackgroundColor = Color.FromHex("#01458e"),
            HorizontalOptions =LayoutOptions.FillAndExpand,
            VerticalOptions=LayoutOptions.FillAndExpand,
            BorderColor = Color.Transparent
        };


        CancelButton.Clicked += CancelButtonClicked;

        CancelStackLayout.Children.Add(CancelButton);
        ButtonGrid.Children.Add(CancelStackLayout, 1, 0);

        OKStackLayout = new StackLayout
        {
            Padding = new Thickness(-6, -6, -6, -6),
            BackgroundColor = Color.FromHex("#ff9500")
        };


        OKButton = new Button
        {
            TextColor = Color.White,
            FontSize = 15,
            BorderRadius = 0,
            Text = Localizer.Localize("OK"),
            BackgroundColor = Color.FromHex("#01458e"),
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
            BorderColor = Color.Transparent
        };
        OKButton.Clicked += OKButtonClicked;

        OKStackLayout.Children.Add(OKButton);
        ButtonGrid.Children.Add(OKStackLayout, 3, 0);


        mainGrid.Children.Add(HeaderLabel, 0, 0);

        mainGrid.Children.Add(divider, 0, 1);

        mainGrid.Children.Add(scroll, 0, 2);

        mainGrid.Children.Add(ButtonGrid, 0, 3);



        AbsoluteLayout.SetLayoutFlags(mainGrid, AbsoluteLayoutFlags.All);

        AbsoluteLayout.SetLayoutBounds(mainGrid, Findlayoutbounds(new Rectangle(0.20, 0.25, 0.5, 0.50)));


        _overlay.Children.Add(mainGrid);


        Content = _overlay;
        logservice.WriteData(Constants.DEBUG_LOGGING, "Alert Message Popup ctor.. End");
    }

   // ThreadHandle thread = new ThreadHandle();
    private void CancelButtonClicked(object sender, EventArgs e)
    {
        ButtonValue = false;
        this.IsVisible = false;
       // thread.WorkMethod();
    }

    private void OKButtonClicked(object sender, EventArgs e)
    {

        ButtonValue = true;
        if (PageSource == "StarterPage") ;
        //MessagingCenter.Send(this, "ModifyValBooleanForAlert");
        this.IsVisible = false;

       // thread.WorkMethod();
    }

    Rectangle Findlayoutbounds(Rectangle fractionalRect)
    {
        if (fractionalRect.Width - 1 == 0)
            fractionalRect.Width = 0.99;
        if (fractionalRect.Height - 1 == 0)
            fractionalRect.Height = 0.99;
        Rectangle layoutbounds = new Rectangle
        {
            X = fractionalRect.X / (1 - fractionalRect.Width),
            Y = fractionalRect.Y / (1 - fractionalRect.Height),
            Width = fractionalRect.Width,
            Height = fractionalRect.Height
        };

        return layoutbounds;
    }

    public void DisplayAlertPopup(string alertBoxTitle, string alertBoxContent,bool CancelDisplay)
    {
        HeaderLabel.IsVisible = false;
        CancelStackLayout.IsVisible = CancelDisplay;
        CancelButton.IsVisible = CancelDisplay;
        HeaderLabel.Text = alertBoxTitle;
        MessageLabel.Text = alertBoxContent;
        OKButton.Text = Localizer.Localize("OK");
        CancelButton.Text = Localizer.Localize("CancelSmall");
        HeaderLabel.IsVisible = true;
    }

    public void DisplayAlertPopup(string alertBoxTitle, string alertBoxContent, string ButtonText)
    {
        CancelStackLayout.IsVisible = false;
        CancelButton.IsVisible = false;
        HeaderLabel.Text = alertBoxTitle;
        MessageLabel.Text = alertBoxContent;
        OKButton.Text = ButtonText;
    }

    public void DisplayAlertConditionalPopup(string alertBoxTitle, string alertBoxContent, bool CancelDisplay)
    {
        CancelStackLayout.IsVisible = CancelDisplay;
        CancelButton.IsVisible = CancelDisplay;
        HeaderLabel.Text = alertBoxTitle;
        MessageLabel.Text = alertBoxContent;
        this.IsVisible = true;

    }

    public void SetButtonText(string OKText, string CancelText)
    {
        if (OKText != null)
            OKButton.Text = OKText;
        if (CancelText != null)
            CancelButton.Text = CancelText;
    }

}
我从其他类获取格式化字符串,并调用
displayertpopup
方法
MessageLabel
是我为其设置此值的标签

更新2:

正如在回答中所建议的,我已经尝试了下面的代码来设置Android的字体。但它也不能以所需的格式显示文本

MessageLabel = new Label
    {
        FontAttributes = FontAttributes.None,
        FontSize = 13,
        HorizontalTextAlignment = TextAlignment.Start,
        VerticalTextAlignment = TextAlignment.Center,
        HorizontalOptions = LayoutOptions.StartAndExpand,
        TextColor = Color.Black,
        FontFamily = "Droid Sans Mono"
    };

您需要使用固定宽度的字体。不幸的是,所有平台都没有内置的,但每个平台都有自己的:

  • iOS-信使新
  • 机器人无单声道
  • UWP-Consolas
如果没有适合您的内置字体,或者您希望在所有平台上都有相同的体验,您也可以在Xamarin.Forms中使用自定义字体。这要求您在类似的服务上找到您喜欢的固定宽度字体。然后,您可以按照《Xamarin帮助》(onXamarin Help)进行操作,该帮助描述了如何在每个平台中包含TTF文件并从XAML中使用它

小结如下:

  • 使用适当的构建操作(UWP-Content、iOS-Bundle资源、Android-Android资产)将字体添加到每个平台项目中
  • 使用
    OnPlatform
    语法设置字体(理想情况下创建一个静态资源,以便可以重用):
  • 资源:

    <OnPlatform x:TypeArguments="x:String" x:Key="MyFontFamily">
        <On Platform="Android" Value="MyFont.ttf#Open Sans" />
        <On Platform="UWP" Value="/Assets/MyFont.ttf#Open Sans" />
        <On Platform="iOS" Value="MyFont" />
    </OnPlatform>
    
    
    
    然后像这样使用:

    <Label FontFamily="{StaticResource MyFontFamily}" />
    
    
    
    你能分享xaml页面吗?你在谈论两个金额不一致的事实吗?@Kzrystof是的,两个金额都不一致。@PaulKaram我已经更新了question@viveknuna你能不能把字体改成像Console这样的字体?我不能解决我的问题,你能帮我吗?哪个问题?我发布的解决方案无效?我尝试了Android的Droid Sans Mono。但是它显示的是相同的旧格式错误还有一件事我需要在code behind(C#)中设置字体,而不是在Xaml中设置字体,并且字体实际发生了变化(ouptut看起来不同吗?)。可能更改未成功,因此您仍然可以看到默认字体