0

ObservableCollectionで表示したいアイテムを持っていますListBoxListboxItemまた、コレクションを正しく表示するためのテンプレートを作成します。この段階では、すべてが正常に機能します。

.cs で

Sensors = new ObservableCollection<Sensor>();
...
lstBox.ItemsSource = Sensors;  

.xaml で

...
 <DataTemplate x:Key="SensorTileTemplate">
            <Border>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="70"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.ColumnSpan="3"></TextBlock>
                    <Image Source="{Binding ImageModel.ImgSource}" Style="{StaticResource ImageGlowStyle}" Height="72" Grid.Row="1" Grid.Column="0"></Image>
                    <StackPanel Grid.Row="1" Grid.Column="1" Margin="5">
                        <TextBlock Text="IP:"></TextBlock>
                        <TextBlock Text="Port:"></TextBlock>
                        <TextBlock Text="Command port:"></TextBlock>
                    </StackPanel>
                    <StackPanel Grid.Row="1" Grid.Column="2" Margin="5">
                        <TextBlock Text="{Binding DeviceAddress}"></TextBlock>
                        <TextBlock Text="{Binding DeviceDataPort}"></TextBlock>
                        <TextBlock Text="{Binding DeviceControlPort}"></TextBlock>
                    </StackPanel>
                </Grid>
            </Border>
        </DataTemplate>

<Style x:Key="ContainerStyle">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSelected}" Value="True">
                    <Setter Property="ListBoxItem.Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>

...

<ListBox Name="lstBox" Focusable="False" 
                             SelectionChanged="lstBox_SelectionChanged" 
                             HorizontalContentAlignment="Stretch" 
                             ItemTemplate="{StaticResource SensorTileTemplate}"
                             ItemContainerStyle="{StaticResource ContainerStyle}">
                </ListBox>

この問題は、エクスパンダーをグループ コンテナーとして使用して特定のアイテムをグループ化する必要がある場合に発生します。

.cs で

...
ICollectionView view = CollectionViewSource.GetDefaultView(Sensors);
view.GroupDescriptions.Add(new PropertyGroupDescription("GroupNumber"));

lstBox.ItemsSource = view;
...

.xaml で

<!--Same Template and Style-->
...
...
<Style x:Key="GroupContainerStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander IsExpanded="True">        
                            <Expander.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Group #" />
                                    <TextBlock Text="{Binding Name}" />
                                </StackPanel>
                            </Expander.Header>
                            <Expander.Content>
                                <ItemsPresenter />
                            </Expander.Content>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
...
<ListBox Name="lstBox" Focusable="False" 
                             SelectionChanged="lstBox_SelectionChanged" 
                             HorizontalContentAlignment="Stretch" 
                             ItemTemplate="{StaticResource SensorTileTemplate}"
                             ItemContainerStyle="{StaticResource ContainerStyle}">
                    <ListBox.GroupStyle>
                        <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}" />
                    </ListBox.GroupStyle>
                </ListBox>

このコードは機能し、アイテムをグループ化しますが、アイテムは非表示になります。
したがって、グループ化されていないアイテムは正しく表示されますが、グループ化されたエキスパンダーでは何も表示されません。
に何かがあると思いますが、何ItemsPresenterExpanderわかりません。

4

1 に答える 1

1

問題は、アプリで使用しているサードパーティのテーマにありました。そのテーマには次のListBoxようなテンプレートがあります。

<Style TargetType="{x:Type ListBox}">
...
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBox}">
                    <Grid>
                        <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" Background="{DynamicResource ControlBackgroundBrush}" />
                        <ScrollViewer Margin="1" Style="{DynamicResource NuclearScrollViewer}" Focusable="false" Background="{x:Null}">
                            <StackPanel Margin="1,1,1,1" IsItemsHost="true" />
                        </ScrollViewer>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Background" Value="{DynamicResource DisabledBackgroundBrush}" TargetName="Border" />
                            <Setter Property="BorderBrush" Value="{DynamicResource DisabledBorderBrush}" TargetName="Border" />
                        </Trigger>
                        <Trigger Property="IsGrouping" Value="true">
                            <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

そのため、そのテンプレートでのItemsPresenter代わりにを使用すると、すべてが機能するようになりました。StackPanel

于 2013-03-25T00:19:10.353 に答える