ComboBoxはIsReadOnlyプロパティをtrueにしても一覧からの選択が可能です。一覧選択させたくない場合は別のプロパティを設定する必要があります。
対処方法
IsHitTestVisibleプロパティとIsTabStopプロパティをfalseにすると一覧選択ができなくなります。 一度に複数のプロパティを操作するのは面倒なので、Trigger Propertyで設定すると便利です。-
XAML
<ComboBox IsReadOnly="{Binding Path=IsReadOnly}" ItemsSource="{Binding Path=ComboBoxDataList}"> <ComboBox.Style> <Style TargetType="ComboBox"> <Style.Triggers> <!--IsReadOnlyと連動して、IsHitTestVisibleとIsTabStopも変更する--> <Trigger Property="IsReadOnly" Value="True"> <Setter Property="IsHitTestVisible" Value="False"/> <Setter Property="IsTabStop" Value="False"/> </Trigger> <Trigger Property="IsReadOnly" Value="False"> <Setter Property="IsHitTestVisible" Value="True"/> <Setter Property="IsTabStop" Value="True"/> </Trigger> </Style.Triggers> </Style> </ComboBox.Style> </ComboBox>
IsReadOnlyプロパティは何のためにあるのか?
ComboBoxのIsEditableプロパティをtrueにすると「テキストボックス + 一覧選択」になり、キーボードでの文字入力が可能になります。IsReadOnlyプロパティはこのテキストボックスを読み取り専用にします。サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2015 以上のバージョンが必要です。検証環境
- Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3
- Microsoft .NET Framework Version 4.6.01055
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))