Expression Blend中的DataTriggers

时间:2010-03-01 16:17:45

标签: wpf vb.net datatrigger

我有一个列表框,显示使用datatemplate格式化的Shipment Items(自定义类)(见下文)。模板中有一个border元素(我称之为Gem),它显示哪个项目处于活动状态(未选中),这将是要添加产品的项目。

template.png

在货件类(Active)中有一个布尔属性,它在Gem元素的单击事件处理程序中设置。通常情况下,Gem应该像第一张图像一样黑,然后在激活时点亮。

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

然而,出于某种原因,当应用程序加载时,所有的宝石都会亮起,表明这些包都是活动的。

**由于stackOverflow的声誉限制,我还无法发布更多超链接。下面的图片与上面的图片位于同一个域。

/ExternalImages/ActiveItems.PNG

我已经检查过所有项目实际上是Active = False,但是gem总是点亮。此外,当我运行click事件时,我会通过Package集合并设置所有Active = False,然后将发件人的TemplatedParent设置为活动状态。

    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 个答案:

答案 0 :(得分:0)

实际上,我想通了。当我制作RadialGradiantBrushes时,我要么没有保存未点亮的那个,要么我将灯光复制/粘贴到它上面并且没有编辑它或什么的。数据触发器正在正常触发,但由于两个渐变都是点亮的,所以看起来没有任何事情发生。对不起,对不起!

科里