- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我见过其他与此非常相似的问题,但不知何故我仍然无法让它工作。这是场景。
我有什么我有一个显示我的 View 模型列表的 ListBox
。每个 View 模型都有一个显示在另一个嵌套列表框中的子项列表。我正在使用 DataTemplate
来实现这一点。
我想要什么我希望子项目有一个 RadioButton
,当 ListBoxItem
被选中并且 ListBox
有焦点时(内部 列表框
)。
目前,上面的 IsSelected
部分运行良好,但是当我从一个 View 模型移动到另一个 View 模型时(即第一个 ListBox 失去焦点),第一个 上的单选按钮ListBox
保持选中状态。
代码如下:
<Style TargetType="{x:Type ListBox}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<RadioButton Focusable="False">
<RadioButton.Style>
<Style TargetType="{x:Type RadioButton}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsFocused, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}}" Value="False">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
<RadioButton.IsChecked>
<Binding Path="IsSelected" Mode="TwoWay" RelativeSource="{RelativeSource TemplatedParent}" />
</RadioButton.IsChecked>
<ContentPresenter></ContentPresenter>
</RadioButton>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
我也试过 MultiBinding
,但也没有用。有什么建议吗?
更新更新以包括我对 MultiBinding
的尝试:
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<RadioButton>
<RadioButton.IsChecked>
<MultiBinding>
<MultiBinding.Converter>
<DataExportTool:AllTrueConverter/>
</MultiBinding.Converter>
<Binding Path="IsSelected" Mode="TwoWay" RelativeSource="{RelativeSource TemplatedParent}"/>
<Binding Path="IsFocused" Mode="OneWay" RelativeSource="{RelativeSource TemplatedParent}"/>
</MultiBinding>
</RadioButton.IsChecked>
<ContentPresenter/>
</RadioButton>
</ControlTemplate>
和转换器:
public class AllTrueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Cast<bool>().All(x => x);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return Enumerable.Repeat((bool)value, 2).Cast<object>().ToArray();
}
}
这部分的 IsSelected
效果很好,即列表中只有一个项目在任何时候都选择了单选按钮。但是,当控件失去焦点时,所选项目的单选按钮仍处于选中状态(不是我想要的)。
最佳答案
这是最终运行的 xaml。禁用单选按钮似乎是这里的关键。
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<RadioButton x:Name="rbIsSelected" IsChecked="False" IsEnabled="False" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="3" />
<ContentPresenter Grid.Column="1"/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="Selector.IsSelectionActive" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="IsChecked" TargetName="rbIsSelected" Value="True"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
查看默认模板很有帮助。
关于wpf - 将 RadioButton IsChecked 绑定(bind)到 ListBoxItem IsSelected 和 ListBox IsFocused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1349039/
这个问题在这里已经有了答案: UICollectionView - didDeselectItemAtIndexPath not called if cell is selected (8 个回答)
我想将选定的选项卡背景设置为红色,而未选择的选项卡背景设置为绿色。但是,只有未选中的选项卡在更改时才会显示为绿色。选择保持白色。
我正在尝试更改 TreeView 中的 SelectedItem 模板。我按照描述在 Style.Triggers 中编写了简单的容器样式和更改项目模板 [1]: How do I highlight
我有一个包含各种项目的 TreeView。项目的样式使得 IsSelected 属性绑定(bind)到我的 VM 到 bool IsSelected。 每当我单击 TreeView 项时,都会调用此
我意识到这可能是菜鸟问题的定义,但我很困惑,非常感谢任何帮助。 我有一个 actionlistener 和 JRadioButton,它们是在 ValublesMain 类中声明的,如下所示。 JRa
我正在尝试用 Selenium 测试一组单选按钮。我已将它们分组在一个列表中 @FindBy(xpath = "//ux-button-group//input[@name='options']")
我使用 isSelected 作为复选框。调试显示该方法无论是否选中都返回false,没关系。 来自 xml 的部分: 和代码: @Override protected void onCr
好吧,我想做的是在选择 JRadioButton 时更改它们的文本,我让它们更改颜色。我知道我可以通过将代码放入特定于每个按钮的专用事件处理方法中来更改文本来做到这一点,但是我该如何做到这一点,以便我
我还是没明白。能否请您准确地告诉我如何覆盖 ListBox 的默认行为。 每次选择 ListBoxItem 时,都应更改边框的背景。不是整行的背景,而是指定的边框的背景。
我有一组绑定(bind)到 ListBox 的 ViewModel。我正在尝试将每个的 IsSelected 属性绑定(bind)在一起。在 WPF 中,它通过设置样式来工作: 这在 S
我目前正在设计我的应用程序 (WPF),我正在尝试更改 DatagridRow 的 IsSelected 的设计。 XAML:
我制作了一个自定义渐变按钮,这样我就可以更改不同状态下的渐变颜色: class GradientButton: UIButton { public var buttongradient: CAGrad
我目前正在重构我制作的一个线程安全的应用程序。 我有一个需要检查的 JCheckBox。此 JCheckBox 在整个程序中的各种不同线程中被引用。 我可以简单地调用 checkbox.isSelec
我有一个单选组,定义了两个黑色和彩色按钮。当我尝试根据选择进行计算时,什么也没有发生。知道为什么我的单选按钮不起作用吗?谢谢 public void onClick(V
您好,我正在尝试显示 JTAppleCalendar 选择的当前日期,但我希望它不要触发 isSelected,因为我想在用户实际选择日期时显示时间选择器,而不是在加载日历时触发与当前日期 选中单元格
我有一个函数,其目的是更改单选按钮的状态,它看起来像这样: public void changeRadioState(List radioButtons){ for(WebEle
下面的代码用于在选择 3 个按钮中的任何一个时更改背景颜色:红色、绿色或蓝色。当我选择其中任何一个时,实际上什么也没有发生。但是,从 JButtons 更改为 JRadioButtons 或 JTog
我在 C#/WPF 中有一个相当大的应用程序,它是用 MVVM 制作的(有点)。 在 ListView 中,我使用 IsSelected 绑定(bind)到所选项目。这些 IsSelected 属性位
我在 JTable 中有一个 JComboBox,正在查看解释参数的 getTableCellRendererComponent 文档。 table - the JTable that is aski
我正在创建一个带有 3 个按钮、3 个复选框和 3 个单选按钮的 JFrame。我遇到按下 3 个按钮中的 1 个按钮时执行的功能的问题。这是函数: private void setCenterCol
我是一名优秀的程序员,十分优秀!