【问题标题】:windows phone listbox ItemTemplate binding to listBoxItemwindows phone listbox ItemTemplate 绑定到 listBoxItem
【发布时间】:2014-05-07 10:40:36
【问题描述】:

我的 ListBox 的 ItemTemplate 中有一个 Button,我想将其 Visibility 绑定到 ListBox Item IsSelected。因此,当项目被选中时会显示 Button。

我发现以下代码在 WPF 上运行良好:

<Button Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}, AncestorLevel=1},Path=IsSelected}",Converter={StaticResource BooleanToVisibilityConverter}/>

但是windows phone 上的RelativeResource 不支持FindAncestor 模式。

有人有什么建议吗?

【问题讨论】:

    标签: xaml windows-phone-8 listbox


    【解决方案1】:

    使用可以使用ListBox的ItemContainerStyle:

               <Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="BorderThickness" Value="0"/>
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="Padding" Value="0"/>
                    <Setter Property="HorizontalContentAlignment" Value="Left"/>
                    <Setter Property="VerticalContentAlignment" Value="Top"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                                <Border x:Name="LayoutRoot" Background="{TemplateBinding Background}" Visibility="{Binding Visibility}" >
                                    <VisualStateManager.VisualStateGroups>
                                        <VisualStateGroup x:Name="SelectionStates">
                                            <VisualState x:Name="Unselected"/>
                                            <VisualState x:Name="Selected">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="testbutton">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup>
                                    </VisualStateManager.VisualStateGroups>
                                    <StackPanel>
                                        <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="Center" Margin="{TemplateBinding Padding}" VerticalContentAlignment="Center"/>
                                        <Button x:Name="testbutton" Visibility="Collapsed" Width="200" Height="100" Content="Test button"/>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
    

    还有,

            <ListBox Width="480" Background="DarkGray"  
                    ItemContainerStyle="{StaticResource ListBoxItemStyle}" 
                    ScrollViewer.VerticalScrollBarVisibility="Disabled"
                    ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                            <TextBlock Text="{Binding Header}" TextAlignment="Center"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    

    【讨论】:

    • 我在 LayoutRoot 边框的“Visibility="{Binding Visibility}"”表达式上收到“BindingExpression 路径错误”。您的意思是“Visibility="{TemplateBinding Visibility}"”吗? PS:我将listBox的ItemsSource设置为“ItemsSource="{Binding}"”,并在代码隐藏中设置了listBox DataContext
    • 是的。我只是从我的代码中复制并忘记删除。请把它命名为 Visibility="{TemplateBinding Visibility}" :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2013-02-01
    • 2012-07-29
    • 2013-04-08
    相关资源
    最近更新 更多