我有一个作为目录选择器的组合框。视觉上它的项目是复选框,每个复选框都是目录。用户可以选中任意一个复选框,这样就可以选择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>