【问题标题】:Get Controls inside a Control获取控件内的控件
【发布时间】:2013-03-06 19:08:05
【问题描述】:

我正在开发一个 WinRT 应用程序,并且知道我想要做什么。我想在单击时在列表的元素内显示一个列表。因此,当我单击第一个列表中的一个项目时,该项目内的一个列表将展开。

<ListView x:Name="SectionListView" SelectionChanged="ListSelectionChanged">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <StackPanel>
                    <Grid>
                        <TextBlock Text="{Binding Name}" />
                        <Image Source="ms-appx:///Assets/EmbossedEllipse.png" />
                        <TextBlock Text="{Binding NumberOfQuestions}"  />
                    </Grid>
                </StackPanel>
                <ListView x:Name="SubMenu" ItemsSource="{Binding Branches}" Visibility="Collapsed">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

当我单击“SectionListView”中的元素时,我希望该项目内的“子菜单”可见。

感谢您的帮助!

【问题讨论】:

    标签: c# xaml windows-8 winrt-xaml


    【解决方案1】:

    您可以使用转换器来更改SubMenu 的可见性状态。

    编辑: 添加一个属性以了解您的项目已被选中(布尔值)。

    <ListView x:Name="SubMenu" ItemsSource="{Binding Branches}" Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    转换器:

    public sealed class BooleanToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            return value is Visibility && (Visibility)value == Visibility.Visible;
        }
    }
    

    希望对你有帮助!

    【讨论】:

    • 好的,你能举个例子吗?
    • 谢谢,但我需要知道如何使用 IsSelected。我用谷歌搜索了一下并试图找出但没有运气..Error: BindingExpression path error: 'IsSelected' property not found on 'TillsynApplication.Classes.Checklist, TillsynApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. BindingExpression: Path='IsSelected' DataItem='TillsynApplication.Classes.Checklist, TillsynApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'; target element is 'Windows.UI.Xaml.Controls.ListView' (Name='SubMenu'); target property is 'Visibility' (type 'Visibility')
    • 您的CheckList 模型需要具有IsSelected 属性。如果您不想在模型中包含此属性,请使用 Anton Tykhyy 的方式。
    【解决方案2】:

    使用ListBoxItem.IsSelected 附加属性,它就是为了这样的目的而引入的。这里有一些 XAML 可以帮助您入门(如果您还没有在某处声明 BooleanToVisibilityConverter)。

    <ListView x:Name="SubMenu" Visibility="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Converter={StaticResource BooleanToVisibilityConverter}}" ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 2018-01-31
      • 2011-02-24
      相关资源
      最近更新 更多