没有找到我要找的东西。任何 android / iPhone 类型开发的新手,但在控件模板、样式和使用 xaml 方面具有 WPF 经验。
这是我正在尝试完成但无法完全使用绑定的示例图像。我有一个控制模板,它给了我最上面的图像。顶部的标题/标签和右侧的 3 个按钮,然后是“ContentPresenter”。这些都独立于它们定义的基类。(为帖子简化的控制模板)
<ControlTemplate x:Key="MyCommonTemplate" >
<StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="{TemplateBinding Title}" />
<Button Text="x" />
<Button Text="y" />
<Button Text="z" />
</StackLayout>
<ContentPresenter/>
</StackLayout>
</ControlTemplate>
<Style TargetType="{x:Type myApp:MyCommonControl}" x:Key="MyCommonStyle">
<Style.Setters>
<Setter Property="ControlTemplate" Value="{StaticResource MyCommonTemplate}" />
</Style.Setters>
</Style>
现在,顶部示例模板下方的两个图像。它们中的每一个都派生自顶部模板,但它们中的每一个都有自己的内部内容,其中表示内容演示者。如图所示,第一个派生控件始终显示其内容,但在第二个中,它有两个部分。一个总是显示,另一个有条件地显示。
这将代表来自同一控件模板的第一个派生控件。Content Presenter 确实正确地反映了图像显示的内部内容
<?xml version="1.0" encoding="UTF-8"?>
<myApp:MyCommonControl
x:Class="MyApp.MySubControl1"
...
xmlns:myapp="clr-namespace:MyApp">
<!-- This properly shows within the "ContentPresenter" as expected -->
<StackLayout>
<Label Text="Always show..." />
<Label Text="for this..." />
</StackLayout>
</myApp:MyCommonControl>
现在,第二个派生控件
<?xml version="1.0" encoding="UTF-8"?>
<myApp:MyCommonControl
x:Class="MyApp.MySubControl2"
...
xmlns:myapp="clr-namespace:MyApp">
<!-- This properly shows within the "ContentPresenter" as expected -->
<StackLayout>
<Label Text="Different sub-panel..." />
<Label Text="Always show..." />
</StackLayout>
<StackLayout IsVisible="{TemplateBinding OkToShowThis}">
<Label Text="This secondary sub-panel..." />
<Label Text="Based on..." />
</StackLayout>
</myApp:MyCommonControl>
“MyCommonControl”的实际基类有多种
public static readonly BindableProperty…
其中一个是数据类型 bool "OkToShowThis"。对于顶部标签和公共按钮区域,它们都分别识别在适当的时候从可见变为隐藏,所以我知道它们有效。
我的问题是从基本控件模板的“ContentPresenter”填充的派生控件。此子控件的“OkToShowThis”没有被刷新。在这种情况下不确定正确的绑定参考。
感谢任何帮助。
解决方案欣赏
感谢Leo Zhu提供的解决方案,我的解释是这样的。最外层的 xaml
x:Name=myCommonControl
指的是创建的类的特定实例。从那里,我可以通过以下方式将特定的内部控制绑定到该对象
<StackLayout BindingContext="{x:Reference Name=myCommonControl}"
现在我已经正确绑定到“Name=myCommonControl”已知的类实例,我可以引用该类实例的任何属性,从而通过
<StackLayout BindingContext="{x:Reference Name=myCommonControl}"
IsVisible="{Binding OkToShowThis}">
内部控件将按预期动态显示/隐藏。太感谢了。