如何使用触发器触发可见性更改为子控件

时间:2013-08-19 20:57:45

标签: c# wpf triggers

我有一个数据绑定列表框,它在类型为wrappanel的datatemplate中生成项目,其中包含其他控件。当我改变可见性以不同地影响wrappanel中的控件时,我希望有这种行为

    <WrapPanel Orientation="Horizontal" Tag="{Binding .}" HorizontalAlignment="Stretch" Visibility="{Binding editMode, Converter={StaticResource VisibilityConverter}}">
                    <Label Width="150" Content="{Binding Path=avaiableAttribute.Text}" Name="lblName"/>
                    <Label Width="150" 
                           Content="{Binding Path=informationItem.ItemString, Mode=TwoWay,  UpdateSourceTrigger=PropertyChanged}" 
                           Initialized="Label_Initialized" 
                           Name="lblText" />
                    <ContentPresenter MinWidth="200" MaxHeight="200" Content="{Binding ., Converter={StaticResource InformationItemConverter}, Mode=TwoWay}" HorizontalAlignment="Stretch"
                                      Name="cpValue"
                                      Initialized="ContentPresenter_Initialized"/>

                    <WrapPanel.Style>
                        <Style  TargetType="{x:Type WrapPanel}">
                            <Style.Triggers>
                                <Trigger Property="Visibility" Value="Visible" >
                                    <Trigger.Setters>
                                        <Setter TargetName="lblText" Property="Visibility" Value="Collapsed" />
                                        <Setter TargetName="cpValue" Property="Visibility" Value="Visible" />
                                    </Trigger.Setters>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </WrapPanel.Style>
    </WrapPanel>

我刚收到以下构建错误

  

属性'targetname'不代表'setter'的有效目标,因为元素

1 个答案:

答案 0 :(得分:1)

使用Setter时,TargetName仅适用于Template中的元素。这意味着您的Trigger必须存在于DataTemplateControlTemplate中。执行您想要执行的操作的最简单方法是为IValueConverter的反转创建自己的BooleanToVisibilityConverter(即,当值为true时返回Visibility.Collapsed。)