2011-02-03 30 views
6

はXAMLで読み取り専用ComboBox(WPF)を設定するには、IsReadOnly/IsEditableあなたViewModelに存在している必要があり、そのプロパティのペアに応じていずれか一方のみを示すComboBoxTextBoxを設定する必要があります。このサンプルでは、​​ "UserNVL"がリソースに存在していなければならず、を名前に変換することができるNameValueListコレクションである必要があります。この場合、RecipientIDがユーザー名のキーです。 VisibilityConverterもリソースに存在し、標準BooleanToVisibilityConverterである必要があります。XAML読み取り専用のComboBox

おやっ!これは私がそれを自分で作らなければならなかったことを見つけるのはとても難しかったです。これにより、ユーザーはテキストボックスの内容を選択できます。決して無効にされたComboBoxはそれをあなたに許しませんでした。

答えて

3
<DockPanel> 
    <TextBlock Text="Recipient" Margin="6,9,3,6" HorizontalAlignment="Right"/> 
    <ComboBox 
     x:Name="RecipientID" 
     ItemsSource="{Binding Source={StaticResource UserNVL}}" 
     DisplayMemberPath="Value" 
     SelectedValuePath="Key" 
     SelectedValue="{Binding Path=RecipientID}" 
     Height="20" 
     Margin="6,6,0,6" 
     MinWidth="200" 
     HorizontalAlignment="Left" 
     IsEditable ="True" 
     Visibility="{Binding Path=IsEditable, Converter={StaticResource VisibilityConverter}}"/> 
    <TextBox 
     x:Name="RecipientName" 
     Text="{Binding ElementName=RecipientID, Path=Text}" 
     Margin="6,6,0,6" 
     MinWidth="200" 
     HorizontalAlignment="Left" 
     Style="{StaticResource textBoxInError}" 
     Visibility="{Binding Path=IsReadOnly, Converter={StaticResource VisibilityConverter}}"/> 
</DockPanel> 
0

なぜIsEnabled = falseに設定しないのはなぜですか?

+2

本当になぜですか?私はユーザーに同じ質問をしました。無効になっているテキストボックスや無効なコンボボックスはとても違って見えますが、「この灰色のもの」が下にあるテキストボックスに似ていない可能性があります。 –

+1

また、読み取り専用で値をコピーできるようにする必要があります。 – Dave

4

IsHitTestVisibleという名前の2つのプロパティがあります。& IsTabVisible。前者はコントロールがマウスイベントに耳を傾け、後者はキーボードイベントに耳を傾けます。それはあなたのコンボボックスに無効な表情を与えないだろうと これはあなたを助けることができていますが、読み取り専用のコンボボックスを作ることに成功します。.. 出典: - でIsEnabledがfalseに設定されている場合 がhttp://www.telerik.com/community/forums/wpf/combobox/isreadonly-does-seem-to-work.aspx

0

、コンボボックスの値がありますほとんど読めない。私は何のような適切な解決策を見つけたことである:(読み取り専用としてフォーマットさ)

  • コンボボックスおよびテキストボックスは、同じグリッド位置に
  • コンボので、ドロップダウンボタンが
  • 可視テキストボックスである追加の15の幅を得るために、次の列にまたがるれます.IsVisibleはコンボボックスにバインドされています.Boolから可視性コンバーターへのIEEnabled。
  • textbox.Textは(それが強くそう型付けされた私の場合、私は実際にそれの.DisplayTextにバインド)
0

私はあなたが作成することがはるかに簡単で実用的な見つけることだと思うcombobox.SelectedItemにバインドされていますこの非常に簡単な方法でComboBoxクラスを拡張するクラス:

  1. オーバーライドbase.OnSelectionChanged(e)が実行できるようにIsReadOnlyの前にプロパティをチェックするコンボボックスのOnSelectionChanged方法。

これで、ComboBox.IsReadOnlyプロパティをTrueに設定するだけで済みます。大きなXAMLはどこにでも書くことはできません...

関連する問題