我在UI上有一个文本块,它通过使用绑定源从Resource文件中填充。现在我附加了依赖属性类型bool,它检查是否为true然后它连接"(*)"签到文本块。
但是在运行时,当屏幕加载时,附加的proeprty会在文本从资源文件中绑定之前先执行,并且由于附加属性添加的这个符号会被绑定覆盖。
依赖性Proerty
public static readonly DependencyProperty IsRequiredProperty = DependencyProperty.RegisterAttached("IsRequired", typeof(bool), typeof(RequiredIndicator),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsParentArrange, OnIsRequiredChanged));
XAML
<TextBlock Text="{Binding Source={x:Static Resources:Resource.ColorTextBlockText}}" Grid.Column="1" Grid.Row="5"
Style="{StaticResource AdminScreenTextBlockStyle}" Resources:RequiredIndicator.IsRequired="True" />
答案 0 :(得分:1)
为什么不使用Converter
?
您不想修改绑定值,否则您的实际数据值将在其末尾包含(*)
,否则绑定将丢失。转换器只需转换绑定值即可在末尾添加(*)
,仅用于显示目的。
<TextBlock Text="{Binding
Source={x:Static Resources:Resource.ColorTextBlockText},
Converter={StaticResource RequiredIndicatorConverter}"
Grid.Column="1" Grid.Row="5"
Style="{StaticResource AdminScreenTextBlockStyle}" />
否则,您可以尝试使用Dispatcher来运行代码DispatcherPriority而不是DispatcherPriority.Render
答案 1 :(得分:0)
您无法以“正确”的顺序强制更新内容。您最好的选择是添加另一个附加属性,例如:
public static readonly DependencyProperty MyTextProperty = DependencyProperty.RegisterAttached("MyText", typeof(string), typeof(RequiredIndicator),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsParentArrange, OnIsRequiredChanged));
然后,您将使用IsRequiredProperty
和MyTextProperty
的组合来设置TextBlock.TextProperty
。然后,您将MyTextProperty
设置为资源。
答案 2 :(得分:0)
如果我说得对,你试图改变从资源收到的文本,但是Text属性的代码在资源:RequiredIndicator.IsRequired =“True”之前执行。 这种情况有时会发生在我身上,并且可以通过在XAML中安排属性来解决它。这不是首选方法,因为它并不总是保证工作。 似乎转换器可以完成魔术,因为有必要在Text属性获取值之前先执行。