因此,我在Xamarin中有一个简单的TableView
,其中每一行都连接到ControlTemplate。我想使用ViewCells
中ControlTemplate上的附加属性来设置一些属性,但是无论我尝试什么,TemplateBindings似乎都会忽略附加的属性。
这是ControlTemplate:
<ControlTemplate x:Key="ResultTemplate">
<StackLayout Margin="20,0,20,0"
BackgroundColor="{TemplateBinding attachableProperties:ColorProperties.BackgroundColor}">
<StackLayout Margin="0,5,0,0">
<ContentPresenter />
<controls:Separator />
</StackLayout>
</StackLayout>
</ControlTemplate>
我通过ViewCell内部的以下代码连接到此模板:
<ViewCell>
<ContentView ControlTemplate="{StaticResource ResultTemplate}"
attachableProperties:ColorProperties.BackgroundColor="{StaticResource OddRowBackgroundColor}">
<Label Text="Hi" />
</ContentView>
</ViewCell>
最后是附加属性的代码:
public static readonly BindableProperty BackgroundColorProperty = BindableProperty.CreateAttached(
"BackgroundColor",
typeof(Color),
typeof(ColorProperties),
Color.Red,
propertyChanged: ((bindable, value, newValue) =>
{
System.Diagnostics.Debug.WriteLine(value);
}));
public static Color GetBackgroundColor(BindableObject obj)
{
return (Color) obj.GetValue(BackgroundColorProperty);
}
public static void SetBackgroundColor(BindableObject obj, Color value)
{
obj.SetValue(BackgroundColorProperty, value);
}
我已经将Debug.Writeline
添加到propertyChanged
参数中以查看是否被调用,所以也是如此。因此,我认为问题确实在于TemplateBinding。但是为什么它不起作用,我无法理解为什么TemplateBinding无法连接到附加属性。
答案 0 :(得分:0)
您必须将逻辑代码放入propertyChanged
:
public static readonly BindableProperty BackgroundColorProperty = BindableProperty.CreateAttached(
"BackgroundColor",
typeof(Color),
typeof(ColorProperties),
Color.Red,
propertyChanged: ((bindable, value, newValue) =>
{
System.Diagnostics.Debug.WriteLine(value);
var control = bindable as View;
if (control != null)
{
control.BackgroundColor = (Color)newValue;
}
}));