簡體   English   中英

如何在具有C#后端而不是XAML的模板上綁定XAML元素?

[英]How can I bind a XAML element on a template with the C# back end instead of in the XAML?

這是我現在所擁有的:

我有一個簡化了此問題的模板:

<?xml version="1.0" encoding="UTF-8"?>
<Frame xmlns="http://xamarin.com/schemas/2014/forms" 
                      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
   xmlns:t="clr-namespace:Japanese.Templates" 
   xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
   x:Class="Japanese.Templates.RoundButtonText" x:Name="this">
   <Label Text="ABC"     
          TextColor="{Binding LabelTextColor, Source={x:Reference this}}"
   />
</Frame>

和這個C#

using Xamarin.Forms;

namespace Japanese.Templates
{
    public partial class RoundButtonText : BaseFrameButtonTemplate
    {
        public RoundButtonText()
        {
            InitializeComponent();
            // I would like to put the Label TextColor binding here instead of in the XAML
        }

    }
}

有人可以告訴我如何在C#后端中添加標簽TextColor的綁定,以便它以與當前編寫時完全相同的方式更改:

 TextColor="{Binding LabelTextColor, Source={x:Reference this}}"

在XAML中?

從XAML刪除綁定,並為Label控件指定一個x:Name:

<?xml version="1.0" encoding="UTF-8"?>
<Frame xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       xmlns:t="clr-namespace:Japanese.Templates" 
       xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
       x:Class="Japanese.Templates.RoundButtonText" x:Name="this">
    <Label x:Name="label" 
           Text="ABC" />
</Frame>

在后面的C#代碼中設置綁定和要綁定的屬性:

using Xamarin.Forms;

namespace Japanese.Templates
{
    public partial class RoundButtonText : BaseFrameButtonTemplate
    {
        Color _labelTextColor;
        public Color LabelTextColor {
            get {
                return _labelTextColor;
            } 
            set {
                if (_labelTextColor != value) {
                    _labelTextColor = value;
                    OnPropertyChanged("LabelTextColor");
                } 
            }
        }

        public RoundButtonText()
        {
            InitializeComponent();
            label.BindingContext = this;
            label.SetBinding(Label.TextColorProperty, "LabelTextColor");
        }
    }
}

現在,每當LabelTextColor屬性值更改時,Label的TextColor屬性也應更改,就像使用XAML綁定一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM