4

我重新设置了 ListBox 的样式以从此链接创建 RadioButtonList

我的要求是这样的:我必须一次从 ListBox 中选择一个项目(即单选模式)。此外,我必须根据绑定到集合的属性禁用/启用 ListBoxItem。所以我设置了

IsChecked="{TemplateBinding IsSelected}"

并从我的集合中绑定IsEnabled属性。

IsEnabled="{Binding IsEnabled}" 

结果如下: 在此处输入图像描述

您可以看到一些记录处于禁用状态,但它们仍然是可选择的。如果我删除IsChecked属性,它会按预期完美运行。但我需要IsEnabledIsSelected功能。然后,我为 IsEnabled 属性创建了一个多值转换器,并根据我已将相应值绑定到该属性的值。现在我无法从列表中直观地选择禁用的项目。但是当我选择一个禁用的项目时,我失去了选择。请检查图像: 在此处输入图像描述

并在代码后面的IsChecked属性设置为第一条记录。我想限制这个选择。我怎样才能做到这一点?xaml 中是否有任何设置有助于满足我的要求?请指教...

提前致谢....

4

1 回答 1

1

听起来您正在绑定的IsEnabled属性RadioButton而不是ListBoxItem. 这将禁用RadioButton,但不会禁用ListBoxItem,这就是仍然可以选择它的原因。

您应该能够绑定 的IsEnabled属性ListBoxItem,并且它将按照您想要的方式工作。 

根据您发布的指向您正在使用的样式的链接,该链接将位于样式ItemContainerStyle部分RadioButtonList

<Style TargetType="{x:Type ListBoxItem}" >
    <!-- Here -->
    <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />

    <Setter Property="Margin" Value="5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border BorderThickness="0" Background="Transparent">
                    <RadioButton Focusable="False"
                                 IsHitTestVisible="False"
                         IsChecked="{TemplateBinding IsSelected}">
                        <ContentPresenter />
                    </RadioButton>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-02-18T15:56:07.650 回答