0

ListBox ItemControl.ItemTemplate 内に Expander があります。データが ListBox にバインドされた後、各 ListItem のすべての Expanders は IsExpanded = False になります。新しい ListItem が ListBox に手動で追加されたときに、IsExpanded のデフォルトを true にする必要があります。私のXAMLは次のとおりです。

    <ListBox
    ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
    ScrollViewer.CanContentScroll="False" 
    VirtualizingStackPanel.IsVirtualizing="False" 
    Grid.ColumnSpan="2" 
    HorizontalAlignment="Stretch" 
    Grid.Row="2" 
    Name="ArbitraryDataListbox"
    ItemsSource="{Binding ElementName=CurrentArbitraryDataListControl, Path=CurrentJob.AdditionalData}">
    <ListBox.Resources>
        <Style TargetType="{x:Type Expander}">
            <Setter Property="IsExpanded" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="BorderBrush" Value="Beige"/>
            <Setter Property="Foreground" Value="#202020"/>
            <Setter Property="Background" Value="Beige"/>
        </Style>
    </ListBox.Resources>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Expander Header="{Binding Path=Name}" Margin="0,8,0,0" IsExpanded="{Binding RelativeSource={RelativeSource self}, ElementName=ArbitraryDataListbox, Path=}">
                <Controls:ArbitraryDataControl 
                    Width="{Binding ElementName=ArbitraryDataListbox, Path=ActualWidth, Converter={StaticResource SubtractConverter}, ConverterParameter=10}" 
                    CurrentArbitraryData="{Binding}" 
                    CurrentJob="{Binding ElementName=CurrentArbitraryDataListControl, Path=CurrentJob}"/>
            </Expander>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ListBox>

私は WPF に非常に慣れていないため、IsExpanded にバインドを設定する方法について頭を悩ませることができないため、新しいアイテムが手動で開かれている場合に当てはまります。

あなたが提供できる助けをありがとう!

4

1 に答える 1

1

私があなたのコードを理解しているなら、今あなたはリストボックスのSelectedItemを展開し、他のアイテムを折りたたんでいます。選択したアイテムが変更されると、古い選択したアイテムが折りたたまれ、新しく選択したアイテムが展開されます。

コレクションにアイテムを追加してからそれを選択できるようにする場合は、ListCollectionViewの使用を検討する必要があります。

ListCollectionViewは内部コレクションをラップし、「CurrentItem」を公開します。このクラスをリストボックスに簡単にバインドできます。これにより、リストを追加した後、ListCollectionView.MoveCurrentTo(object)を呼び出してオブジェクトを選択できます。

于 2012-06-05T17:03:33.697 に答える