如何禁用ComboBox中所选项的自动选择

时间:2017-11-17 09:36:09

标签: c# wpf combobox

我有一个作为目录选择器的组合框。视觉上它的项目是复选框,每个复选框都是目录。用户可以选中任意一个复选框,这样就可以选择2,3,10,您可以将其命名为目录。

这是组合框绑定:

<ComboBox ItemsSource="{Binding Path=KnownDirectories}" 
  IsEditable="True"  IsReadOnly="True" Text="{Binding Path=WorkingDirectory}">

有效。

什么不起作用的情况是用户点击不在chekbox矩形,而是在其他地方点击,所以当用户实际选择行而不是切换复选框时就是这种情况。在这种情况下,WPF选择行,并将其ToString表示(在本例中为类型的名称)设置为WorkingDirectory

作为效果,而不是像“C:\ my_dir”之类的东西,我看到“DirectoryType”。

当用户选择(点击)整行而不是点击复选框切换时,如何禁用此自动选择?

暂时我只是在ToString中覆盖DirectoryType

组合框的初始项目模板:

<ComboBox.ItemTemplate>
  <DataTemplate>
    <StackPanel Orientation="Horizontal">
      <CheckBox IsChecked="{Binding Path=IsDirectorySelected}">
        <Label Content="{Binding Path=DirectoryName}" />
      </CheckBox>
    </StackPanel>
  </DataTemplate>
</ComboBox.ItemTemplate>

Ash建议之后(所有错误都是我的):

<DataTemplate>
  <ComboBoxItem IsSelected="{Binding Path=IsDirectorySelected}">
    <StackPanel Orientation="Horizontal">
      <CheckBox IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
            AncestorType={x:Type ComboBoxItem}},Path=IsSelected}">
        <Label Content="{Binding Path=DirectoryName}" />
      </CheckBox>
    </StackPanel>
  </ComboBoxItem>
</DataTemplate>

0 个答案:

没有答案