- 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/
您好,我找不到任何类似的问题,所以我发布了新问题。在下面的代码中,我使用 ListBoxItems 创建 ListBox 控件,每个 ListBoxItems 都包含内部单选按钮。当我单击单选按钮时,
我将以下数据模板应用于列表框: 当我单击按钮时,命令被触发,但 ListBoxItem 没有被选中。如何强制它被选中,以便我可以在我的“执行
我想在数据绑定(bind)的多个列表框上实现拖放 - 使用 MVVM 模式。我不是试图在列表框之间拖放,而是希望用户能够在每个列表框中拖放列表框项,以便他们可以重新排列排序顺序。我在 SO 上发现这篇
我想实现一种效果,其中 ListBoxItem 被选中(突出显示)几秒钟,然后被取消选中。尝试使用淡入淡出效果实现简单的控件突出显示,但为了使事情正常进行,我需要相应地更改一个属性。 我有一个 IsS
我尝试实现一个 ListBox,其中所选项目比其他项目更详细地显示。 Josh Smith 在 his blog 上展示了一种方法. 为了增强用户体验,我想对变化进行动画处理(即项目变大,附加信息淡入
我只能找到如何通过单击组件 -> Items Editor 来创建 ListBoxItem。 我们如何使用 Firemonkey 以编程方式创建 ListBoxItem? 最佳答案 只需创建列表框项,
是否可以从 Windows Presentation Foundation 的代码隐藏更改选定的 ListBoxItem? 这真的是一个非常简单的任务,我有一个 Next 和 Previous 按钮,
我有一个带样式的列表框,包括带样式的 Listboxitem。我正在尝试创建一个将不透明度从 0 更改为 1 的动画,以使项目显示在列表中。我已设法使用以下代码做到这一点:
我们如何在运行时向 Windows Metro 风格应用程序中的 ListBox 控件添加新项目? 我来自 WinForms,所以你可以想象,我现在很困惑。 我有以下内容: public class
由于某些原因,我必须在后面的代码中初始化 ListBox 项,原因太复杂了。 在 WPF UserControl 显示期间调用 LoadFamily()。 public void LoadFamily
我正在为一个学校项目构建一个聊天室。在聊天室中有一个包含所有消息的列表框。 Messages 是一个包含所有消息的 ObservableCollection。 Message 类有发件人姓名变量。
我想将用户控件 (View) 绑定(bind)到 ListBoxItem。 ListBox 绑定(bind)到 ViewModel 的集合。我已将 ListBox 的 ItemTemplate 设置为
我在设置 HighlightBrushKey 时遇到问题的 SelectedItem的 Listbox在 WPF 中。我的意图是根据代码中给定的 bool 值设置 Item 的颜色。 我试过以下步骤:
实际的视觉效果由 DataTemplate 决定。在运行时,如何遍历 ListBoxItem 的所有可视元素? 最佳答案 假设您引用了 ListBoxItem 之一列表中的 s,您可以使用 Visua
这是我的问题:
我有一个 ListBox 控件;我如何使用下面的代码为每个 ListBoxItem 设置 ToolTip。
我想做这样的事情。
我正在尝试为我的 wpf 应用程序中的业务对象定义一个 dataTemplate,该对象的集合绑定(bind)到 ListBox。
我有一个 ListBox 控件;我如何使用下面的代码为每个 ListBoxItem 设置 ToolTip。
我正在创建一个自定义混合行为来作用于 ListboxItem,即 public class DragtestBehaviour : Behavior { public DragtestBeha
我是一名优秀的程序员,十分优秀!