ChangePropertyAction修改Visibility在ListBoxItem DataTemplate中不起作用

时间:2010-09-28 12:22:11

标签: c# wpf xaml wpf-controls binding

我正在尝试通过ChangePropertyAction更改ListBoxItem模板中控件的可见性(基于它在父列表框中选择),但下面的代码不起作用。我试图摆弄触发器上的TargetName或通过样式设置控件的默认可见性。我通过DebugConvert调试了Binding,并检查IsSelected是否正确设置为true但它仍然不起作用。任何人都可以向我解释为什么这不起作用以及我如何解决这个问题?

<ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition/>
                                    <ColumnDefinition/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding PersonalData.LastName}" FontSize="20" FontWeight="Bold"  Grid.Column="0"/>
                                <TextBlock FontSize="20" Text="{Binding PersonalData.FirstName}" Grid.Column="1" />
                                <StackPanel x:Name="buttonStackPanel" Orientation="Horizontal" Grid.Column="2" Visibility="Collapsed">
                                    <Interactivity:Interaction.Triggers>
                                        <ei:DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}, Mode=FindAncestor}, Path=IsSelected, Converter={StaticResource DebugConverter}}">
                                            <ei:ChangePropertyAction PropertyName="Visibility">
                                                <ei:ChangePropertyAction.Value>
                                                    <Visibility>Visible</Visibility>
                                                </ei:ChangePropertyAction.Value>
                                            </ei:ChangePropertyAction>
                                        </ei:DataTrigger>
                                    </Interactivity:Interaction.Triggers>
                                    <Button Content="Do Something"></Button>
                                </StackPanel>
                            </Grid>
[...]

1 个答案:

答案 0 :(得分:0)

除非您使用自定义列表框项容器,否则只需使用FindAncestor模式中的RelativeSource绑定将StackPanel的Visibility属性绑定到容器ListBoxItem的IsSelected属性。