要在XAML(WPF)中设置ReadOnly ComboBox
,您必须根据一对属性设置ComboBox
和TextBox
只显示其中一个属性{{您IsReadOnly
必须存在的1}} / IsEditable
。请注意,在此示例中,“ViewModel
”必须存在于资源中,它应该是UserNVL
集合,允许我们将NameValueList
转换为名称。在这种情况下,ID
是用户名的键。另请注意,RecipientID
也必须存在于资源中,并且是标准VisibilityConverter
。
天!这很难找到,我必须自己做。这允许用户选择文本框的内容。禁用BooleanToVisibilityConverter
绝对不允许你这样做。
答案 0 :(得分:5)
有两个名为IsHitTestVisible& IsTabVisible。前者使控制耳聋的鼠标事件和后者的键盘事件。 这可以帮助你,因为它不会给你的组合框提供禁用的外观,但你将成功制作一个只读的组合框.. 资源 :- http://www.telerik.com/community/forums/wpf/combobox/isreadonly-does-seem-to-work.aspx
答案 1 :(得分: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>
答案 2 :(得分:1)
为什么不设置IsEnabled = false?
答案 3 :(得分:1)
如果IsEnabled设置为false,则Combobox值几乎不可读。我发现合适的解决方案是:
答案 4 :(得分:1)
我认为你会发现创建一个以这种非常简单的方式扩展ComboBox类的类更容易和实用:
这样你只需将ComboBox.IsReadOnly属性设置为True即可。没有大的XAML可以随处写...
答案 5 :(得分:0)
这是一个自定义的 ComboBox
子类,它提供了我的场景所需的只读行为:
public class ReadOnlyComboBox : ComboBox
{
static ReadOnlyComboBox()
{
IsDropDownOpenProperty.OverrideMetadata(typeof(ReadOnlyComboBox), new FrameworkPropertyMetadata(
propertyChangedCallback: delegate { },
coerceValueCallback: (d, value) =>
{
if (((ReadOnlyComboBox)d).IsReadOnly)
{
// Prohibit opening the drop down when read only.
return false;
}
return value;
}));
IsReadOnlyProperty.OverrideMetadata(typeof(ReadOnlyComboBox), new FrameworkPropertyMetadata(
propertyChangedCallback: (d, e) =>
{
// When setting "read only" to false, close the drop down.
if (e.NewValue is true)
{
((ReadOnlyComboBox)d).IsDropDownOpen = false;
}
}));
}
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
if (IsReadOnly)
{
// Disallow changing the selection when read only.
e.Handled = true;
return;
}
base.OnSelectionChanged(e);
}
}
关于这种方法的要点: