问题描述
我正在为 ListBox 的 ItemTemplate 实现一个模板,但我有一个非常简单的编译错误,但我无法弄清楚其背后的原因是什么。我想知道为什么 private void loadrewardedvideoad() {
RewardedAd.loadAd(getString(R.string.reward),new AdRequest.Builder().build());
}
@Override
public void onRewarded(RewardItem rewardItem) {
//ProcessRewardedItem and then reload
loadrewardedvideoad();
}
和 Property="Panel.Background"
之间存在这种差异。第一个变体没有错误并且编译良好,而后者产生编译错误:
错误 MC4111 找不到触发器目标“ContentBorder”。 (目标必须出现在任何使用它的 Setter、触发器或条件之前。)
为什么 DataTemplate 的 Trigger 的 Setter.TargetName 属性无法通过 Property="Background"
找到目标,但可以通过 Property="Background"
找到目标?我没有更改 VisualTree 中触发器的位置(例如:我没有将触发器进一步向下移动到树中)。
对不起,如果这个问题已经在别处回答了;我进行了研究,但没有找到与我想出的这个问题和结果相关的任何答案。
以下是重现此案例的完整 XAML。
Property="Panel.Background"
解决方法
据我所知,指定模板及其触发器的顺序很重要。 试试这个:
<DataTemplate>
<Border BorderThickness="1" CornerRadius="10" x:Name="ContentBorder">
<!--Filling in the template-->
</Border>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DarkTurquoise" TargetName="ContentBorder"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
为了以防万一,Border 从 Control 继承 Background。
因此,该属性的全名是 Control.Background,而不是 Panel.Background。