【问题标题】:Change Rectangle Background to Reflect State of Boolean in DataContext in WPF在 WPF 中的 DataContext 中更改矩形背景以反映布尔值的状态
【发布时间】:2012-04-10 15:53:51
【问题描述】:

我有一个简单的 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>

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

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

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    几个问题:

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

    • DataTriggers 需要在样式中。

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

    这应该可行:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2011-05-28
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多