代码之家  ›  专栏  ›  技术社区  ›  CodeWarrior

表达式混合中的数据触发器

  •  -1
  • CodeWarrior  · 技术社区  · 15 年前

    我有一个列表框,显示使用数据模板格式化的装运项目(自定义类)(见下文)。模板中有一个border元素(我称之为gem),它显示哪些项目是活动的(未选中),哪些项目将是要添加产品的项目。

    template.png

    Shipment类(active)中有一个布尔属性,该属性在gem元素的click事件处理程序中设置。通常情况下,宝石应该像第一张图片中的一样暗,然后在激活时亮起。

    我在datatemplate中设置了一个datatrigger来处理gem颜色的变化。

        <DataTemplate.Triggers>
     <DataTrigger Binding="{Binding Active}" Value="True">
      <Setter TargetName="ActiveGem" Property="Background">
       <Setter.Value>
        <RadialGradientBrush>
         <GradientStop Color="Red" Offset="0"/>
         <GradientStop Color="#FF820000" Offset="1"/>
        </RadialGradientBrush>
       </Setter.Value>
      </Setter>
     </DataTrigger>
     <DataTrigger Binding="{Binding Active}" Value="False">
      <Setter TargetName="ActiveGem" Property="Background">
       <Setter.Value>
        <RadialGradientBrush>
         <GradientStop Color="Red" Offset="0"/>
         <GradientStop Color="#FF820000" Offset="1"/>
        </RadialGradientBrush>
       </Setter.Value>
      </Setter> 
     </DataTrigger>
    </DataTemplate.Triggers>
    

    但是,由于某种原因,当应用程序加载时,所有gem都会亮起,显示包都处于活动状态。

    **由于StackOverflow的声誉限制,我还不能发布更多的超链接。下面的图像与上面的图像在同一个域中。

    /外部图像/activeitems.png

    我已经检查过所有项目实际上都是活动的=假,但是宝石总是亮着的。另外,当我运行click事件时,我会检查包集合并将all active=false设置为active,然后将发送者的templatedParent设置为active。

        Dim ActiveShipments = From ship In ShipmentData _
                             Where ship.Active = True
        For Each MyShipment As Shipment In ActiveShipments
            MyShipment.Active = False
        Next
        Dim Gem As Border = sender
        Dim ShipmentObject As ContentPresenter = Gem.TemplatedParent
        ShipmentObject.Content.Active = True
    

    宝石不会返回到未点亮的状态(它们一开始就不在)。它们只能保持点亮。有什么想法吗?

    科丽

    --奇怪的是,只有在第一次编辑时才出现在代码框中…立即修复。

    1 回复  |  直到 15 年前
        1
  •  0
  •   CodeWarrior    15 年前

    实际上,我知道了。当我制作radialgrantantbrushes时,我或者没有保存未点燃的,或者复制/粘贴上的灯,也没有编辑它或其他东西。DataTrigger正常触发,但由于两个渐变都是点燃的,所以看起来好像什么都没有发生。对不起,麻烦你了!

    科丽