0

下面我有两个控件模板,它们用作网格中两个不同列的单元格模板。您会注意到两列都绑定到相同的模型属性(代码和值),但使用转换器以不同方式显示这些值。当数据更改时,两个控件模板也使用相同的样式来“闪烁”单元格。

这有效,但不完全是我想要的方式。现在,当 Data.Code 或 Data.Value 发生变化时,两个列单元格都会闪烁。我想要的是如果 Data.Code == "CodeA",那么使用模板 CDisplay2 的列不应该闪烁(事实上,它不应该显示任何内容)。如果 Data.Code == "CodeB",则使用模板 CDisplay1 的单元格不应闪烁。

为了实现这一点,如果我可以有条件地应用基于 Data.Code 的样式模板,那就太好了,但我不知道该怎么做。对此有什么想法吗?如何根据特定属性值有选择地将样式应用于绑定到同一模型属性的多个控件?

<Style x:Key="FlashStyle" TargetType="TextBlock" >
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames RepeatBehavior="4x" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="CDisplay1" >
    <Grid>
        <TextBlock Style="{StaticResource Flash1}" >
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource conv}"  ConverterParameter="CodeA" NotifyOnTargetUpdated="True">
                    <Binding Path="Data.Code"  />
                    <Binding Path="Data.Value"  />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</ControlTemplate>
<ControlTemplate x:Key="CDisplay2" >
    <Grid>
        <TextBlock Style="{StaticResource Flash1}" >
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource conv}"  ConverterParameter="CodeB" NotifyOnTargetUpdated="True">
                    <Binding Path="Data.Code"  />
                    <Binding Path="Data.Value"  />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</ControlTemplate>
4

1 回答 1

0

我使用触发器有条件地设置绑定。这样做的效果是 FlashStyle 不会对两个控件都执行,因为某些单元格不会被绑定并且转换器不会被调用。

于 2012-08-10T23:06:45.340 回答