【发布时间】:2013-06-25 19:48:43
【问题描述】:
美好的一天,
我有一个黑色背景的 TextBlock 元素和黑色前景色的文本。在任务完成之前,我不希望我的用户看到文本。然后文字会变成绿色。
我在 xaml 中的样式触发器如下所示:
<Style x:Key="DataImportCompletedStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="#FF000000" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsImportCompleted}" Value="True">
<Setter Property="Foreground" Value="#FF99F999" />
</DataTrigger>
</Style.Triggers>
</Style>
我的 TextBlock 看起来像:
<TextBlock x:Name="ImportStatusMesage"
Grid.Row="3"
Margin="5,0,5,10"
Background="Black"
FontSize="18"
Foreground="#FF000000"
Style="{StaticResource DataImportCompletedStyle}"
Text="Data Import Completed" />
我的 IsImportCompleted 布尔属性代码是:
private bool isImportCompleted;
public bool IsImportCompleted
{
get { return isImportCompleted; }
set
{
isImportCompleted = value;
System.Diagnostics.Debug.WriteLine("Import Process Completed...OnPropertyChanged");
OnPropertyChanged("IsImportCompleted");
}
}
它确实实现了 INotifyPropertyChanged。当我在“输出”窗口中看到我的消息时,该任务工作正常并更新 IsImportCompleted 属性,但文本不会改变颜色。
我认为通过使用 INotifyProperty,UI 会自行更新。
我正在使用 Snoop 并验证 IsImportCompleted 设置为 true。但仍然没有文字颜色变化。
任何建议,
TIA,
科森
【问题讨论】:
-
您的后备布尔变量是否使用与您的属性相同的名称,或者这是一个错字?
-
你是说这里?绑定="{绑定 IsImportCompleted}"
-
对不起,没关系,看看你用小写和大写的定义,我的眼睛看到它们是一样的。
-
没关系,我想通了。我在我的 xaml 中设置 Foreground 属性,它将始终根据优先规则覆盖我在触发器中设置的内容。在我的 TextBlock 标签中取出 Foreground 属性定义后,一切正常!
-
@coson 将您的解决方案添加为答案并将其标记为接受以供进一步参考以及可能与您遇到相同问题的用户。
标签: wpf