0

我有一个简单的 UI,它在它的应用程序模型中调用几个解析和处理例程,这些例程通过 BackgroundWorkers 异步完成工作。当模型代码正常工作时,它会设置几个属性,解析和处理。我的 UI 中有两个矩形,我想根据是否设置了这些布尔值来更改颜色。窗口 DataContext 设置为模型,消息列表和 UI 的其他部分工作正常,我似乎无法弄清楚如何在 XAML 中表达我想要做的事情。

这是我的矩形代码的示例:

<Rectangle Height="20" Name="ParsingLamp" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" Fill="Gray">
    <Rectangle.Triggers>
        <Trigger Property="{Binding Path=Parsing}" Value="true">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="LightGreen" />
        </Trigger>
        <Trigger Property="{Binding Path=Parsing}" Value="false">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="Brown" />
        </Trigger>
    </Rectangle.Triggers>
</Rectangle>

我收到一条错误消息,提示“填充成员无效,因为它没有质量类型名称。”

也许触发器不是做我想要完成的事情的正确方法?

4

1 回答 1

6

几个问题:

  • 您需要使用 DataTrigger,因为您要绑定到 ViewModel。

  • DataTriggers 需要在 Style 中。

  • 如果您设置一个本地值,例如,<Rectangle Fill=''/>这会覆盖触发器设置的值,因此您需要将其删除。

这应该有效:

<Page.Resources>
    <Style x:Key="LampStyle" TargetType="{x:Type Rectangle}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Parsing}" Value="true">
                <Setter Property="Fill" Value="LightGreen" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=Parsing}" Value="false">
                <Setter Property="Fill" Value="Brown" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Page.Resources>

<Grid>
    <Rectangle Height="20" Style="{StaticResource LampStyle}" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" />
</Grid>
于 2012-04-10T16:19:08.380 回答