当Entry.Text的长度等于Entry.MaxLength时,需要修改Label.TextColor,代码如下:
// Part of the ControlTemplate
...
<VerticalStackLayout>
<Entry
x:Name="entry"
MaxLength="{TemplateBinding EntryLength}" />
<Label HorizontalOptions="End" >
<Label.Triggers>
<DataTrigger TargetType="{x:Type Label}"
Binding="{Binding Source={x:Reference entry}, Path=Text.Length}"
Value="{Binding Source={x:Reference entry}, Path=MaxLength}" >
<Setter Property="TextColor" Value="Red"/>
</DataTrigger>
</Label.Triggers>
</Label>
</VerticalStackLayout>
....
1条答案
按热度按时间brccelvz1#
你声称你想用MVVM来完成这件事,但你却在尽一切努力打破这种架构。
事实是,这个数据触发器:
不必知道类Entry,它具有名为“文本”的属性,并且该属性具有自己的属性“长度”。
而且你不必手工编写随机的属性名,也不必在你的程序中制造bug(因为intelli-sense并不总是那么智能)。
这个条目,应该绑定到一些属性(但我没有看到?!?)。
显然,你已经有了MaxLenght的另一个属性(为什么是这个变量,我不知道。它不是很常见,有你的MaxLength变量。你确定这是你想要的吗?)。
所以你所要做的就是将一个字符串属性长度与另一个属性进行比较。这里与可视化元素无关。
编辑:看看这个答案,你可以从这里学到更多,而不是从文档... https://stackoverflow.com/a/73686153/6643940