Почему не работает мой TemplateBinding для моего пользовательского TemplatedView BindableProperty - PullRequest
0 голосов
/ 17 мая 2018

Вот мой XAML:

<?xml version="1.0" encoding="UTF-8"?>
<TemplatedView  xmlns="http://xamarin.com/schemas/2014/forms" 
                xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                xmlns:control="clr-namespace:Core.View.Control"
                x:Class="Core.View.Control.MyButton">

  <TemplatedView.Resources>
    <ResourceDictionary>
      <ControlTemplate x:Key="MyButtonTemplate">
        <Grid BackgroundColor="Teal">
          <!-- other irrelevant stuff. Trust me, it's irrelevant. -->
            <Grid x:Name="MyGrid" Grid.Row="1" ColumnSpacing="0" BackgroundColor="{TemplateBinding Parent.BGCol}"> <!-- Can't get this TemplateBinding to work -->
            <!-- If I change the above to something static, like BackgroundColor="Orange", it works. -->
      </ControlTemplate>

      <Style TargetType="TemplatedView" x:Key="MyButtonStyle">
        <Setter Property="ControlTemplate" Value="{StaticResource MyButtonTemplate}" />
      </Style>

И мой код:

namespace Core.View.Control
{
  public partial class MyButton : TemplatedView
  {
    public static readonly BindableProperty BGColProperty =
      BindableProperty.Create("BGCol", typeof(Color), typeof(MyButton), Color.Orange);

    public Color BGCol
    {
      get
      {
        return (Color)GetValue(BGColProperty);
      }
      set
      {
        SetValue(BGColProperty, value);
      }
    }

    public MyButton()
    {
      InitializeComponent();
      Style = (Style)this.Resources["MyButtonStyle"];
    }

    // ...

Если я изменю BGColproperty на строку типа и использую "Orange" вместо Color.Orange везде ... это все еще не работает.

Как связать свойство background элемента управления Grid в моем ControlTemplate с BGCol?

[игнорировать]Неактуальный текст, потому что SO все еще не доволен, говоря слишком много кода.Иногда код со встроенными комментариями (как я это сделал) в значительной степени объясняет это лучше, чем любой объем текста, и вы можете подумать, что такой сайт, как SO, поймет это, но нет.Больше болтовни.Еще больше.О, здесь мы идем, этого кажется достаточно.[/ Игнорировать]

1 Ответ

0 голосов
/ 17 мая 2018
<Grid x:Name="MyGrid" BackgroundColor="{TemplateBinding BGCol}" >

Привязки к шаблону переходят в элемент управления, поэтому родительский элемент просто запутывает его.

...