0

アイテムとしてラジオボタンが付いたリストボックスがあります。リストボックスはスクロール可能で、できるだけ多くの項目を追加できます。ただし、最初のアイテムは常に表示されるはずなので、フリーズしたままにしておく必要があります。何かアイデアはありますか?

4

1 に答える 1

0

その少しトリッキー。Listboxのテンプレートを編集して、scrollviewerの上にListBoxItemを追加できます。のような何か

<Style x:Key="ListBoxTopItemFixedStyle" TargetType="{x:Type ListBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBox}">
                    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <ListBoxItem Content="{Binding Path=FreezeItem.PropertyName, 
                                                    RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
                                         Grid.Row="0"/>
                            <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"  Grid.Row="1">
                                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </ScrollViewer>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsGrouping" Value="true"/>
                                <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

私はまた、コントロールのコンテキストでコレクションからのアイテムであるFreezeItemを使用しました。同じ概念を使用して、必要に応じて変更できます。FreezeItemを避けたい場合は、コンバーターを使用してコレクションの最初のアイテムを取得することもできます。

于 2013-01-16T06:53:47.553 に答える