3

データバインドされたコンボ ボックスがあります。このリストでは、セパレーターが必要です。これはデータバインドされているため、この投稿と非常によく似た処理を行います。私のデータベースはリストを返し、セパレーターが必要な場所をマークするために「-」を含み、データトリガーはこれをセパレーターにします。

<ComboBox Name="cbAction" Grid.Column="1" Grid.Row="0" Margin="5,2,5,2" DisplayMemberPath="Description" SelectedValuePath="Code" SelectionChanged="cbAction_SelectionChanged">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
             <Style.Triggers>
                <DataTrigger Binding="{Binding Code}" Value="-">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                                <Separator HorizontalAlignment="Stretch" IsEnabled="False"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

これは、私がここで抱えている問題と、小さな設計上の問題 (別の質問に入れます) を除いて、ほとんど問題なく動作します。

マウスを使用する場合、ユーザーはセパレーターを選択できません。これは正しいです。ただし、ユーザーが上下矢印を使用して項目を選択すると、セパレーターを選択できます。これは、セパレーターをスキップするデフォルトの動作ではありません。

XAML にさまざまな ComboBoxItems と Separator 項目がある場合と同じように、このセパレーターを動作させるにはどうすればよいですか (上下キーを使用するときにセパレーターをスキップします)。

4

3 に答える 3

5

Meleak が提案するように「Focusable」を設定する代わりに、Setter で「IsEnabled」を false に設定します。

<DataTrigger Binding="{Binding Code}" Value="-"> 
    <Setter Property="IsEnabled" Value="False"/>
    <Setter Property="Template"> 
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
                <Separator HorizontalAlignment="Stretch"/> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</DataTrigger> 
于 2010-11-24T15:12:18.370 に答える
2

上記の提案を試しましたが、まだセパレーターを取得できませんでした。代わりに、コンボ ボックスに空の選択可能なエントリを追加しました。最後に、これが私のために働いたものです。

バインドされたデータ項目を NULL に設定しました。そして、私の XAML は次のようになります。

<DataTrigger Binding="{Binding}" Value="{x:Null}">
    <Setter Property="IsEnabled" Value="False"/>
    <Setter Property="Template"> 
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
                <Separator HorizontalAlignment="Stretch"/> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</DataTrigger>
于 2010-11-26T10:59:49.570 に答える
1

選択可能な項目は Separator 自体ではなく、Separator を含む ComboBoxItem です。
DataTrigger で Focusable="False" を設定してみてください。これにより、ComboBoxItem が「選択不可」になります。


固定セッター位置の更新

<DataTrigger Binding="{Binding Code}" Value="-"> 
    <Setter Property="Focusable" Value="False"/>
    <Setter Property="Template"> 
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
                <Separator HorizontalAlignment="Stretch" IsEnabled="False"/> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</DataTrigger> 
于 2010-11-23T22:19:34.613 に答える