2010-11-23 14 views
2

データバインドされたコンボボックスがあります。このリストでは、区切り記号が必要です。これはデータバインドされているので、私はthis postと非常によく似た何かをしています。私のデータベースはリストを返し、区切り記号がどこに行かなければならないのかを示すために ' - 'を含み、datatriggerはこれを区切り記号にします。WPFのデータバインドコンボボックスでセパレータの選択を無効にする

<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を持っていた場合、それは次のようになり道とセパレーターアイテム(上下キーを使用している場合、セパレータをスキップ)

答えて

3

を行う必要があります。

<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> 
+2

IsEnabledを設定するとこの問題は解決しました。 – jmlumpkin

1

に似た振る舞いをすることができますどのように

Separator自体は含みますが、Separatorを含むComboBoxItemです。
DataTriggerにFocusable = "False"を設定してください。 、Meleakによって提案されたセッターに代わりfalseに "でIsEnabled" を設定し、これは代わりに "Focusableの" 設定の
固定セッターの位置に

更新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> 
+0

これは問題の一部を解決しますが、完全には解決しません。私がコンボボックスを '展開'していれば、もはや矢印キーで区切り文字を選択することはありません。しかし、コンボボックスが現在のタブストップになっていて拡張されていない場合は、矢印キーを使用して上下に移動しても区切り文字を選択できます。 – jmlumpkin

+0

ああ、それは本当です、私はドロップダウンについてのみ考えました。 ComboBoxで直接選択するには、karmicpuppetがFocusableの代わりにIsEnabledを使用する必要があります。 –

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> 
関連する問題