- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个带有允许多选列表框的应用程序 (SelectionMode=Multiple); lisbox 中的项目是食谱的成分。
不幸的是,单击列表框项目会选择该项目,这可能不是您想要的。我想要以下场景:
我所做的是设置 ListBoxItem 的样式以包含一个复选框和一个 ContentPresenter(如 in this blog)。尽管如此,单击成分名称仍会选择它。因此,我在包含成分名称的文本 block 上捕获 MouseDown 事件,找到底层的 ListBoxItem,对其调用 Focus() 并将事件的 Handled 属性设置为 true。
现在,列表框项目获得焦点但未被选中。使用向上和向下键显示焦点在正确的项目上。我的问题是用户看不到他点击了正确的项目。虚线矩形未显示在此项目上。这是结果:
这是我想要的:
我试过调用私有(private) WPF 方法,如 KeyboardNavigation.ShowFocusVisual,我试过将击键发送到列表框(当由人完成时,按下右光标键或 Alt 键使虚线矩形出现)。
有什么想法吗?
最佳答案
SendInput 是我发现的唯一可以通过此方法的方法。来自 this链接。
PInvoke to SendInput – this is the official way to simulate input. It pushes the input through all of the expected code paths, and is indistinguishable from real input.
一个简单的使用方法是 InputSimulator来自 CodePlex。
添加对 InputSimulator.dll 的引用我们可以做这样的事情
private bool m_waitingForFocusVisualStyle = false;
private void ListBoxItem_GotFocus(object sender, RoutedEventArgs e)
{
if (m_waitingForFocusVisualStyle == false)
{
m_waitingForFocusVisualStyle = true;
InputSimulator.SimulateKeyDown(VirtualKeyCode.TAB);
InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.SHIFT, VirtualKeyCode.TAB);
}
else
{
m_waitingForFocusVisualStyle = false;
}
}
但是由于很多原因这可能并不理想(例如 Shift+Tab 到 ListBoxItem)
一个更好的主意可能是删除 ListBoxItem 的 FocusVisualStyle 并像这样在 ControlTemplate 中添加您自己的。 (从 Blend 复制并添加了来自标准 FocusVisualStyle 的“FocusVisualStyle”)
<ListBox ...>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource ListBoxItemTemplate}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
<ControlTemplate x:Key="ListBoxItemTemplate" TargetType="{x:Type ListBoxItem}">
<Grid>
<Rectangle Grid.ZIndex="1"
Name="focusVisualStyle"
StrokeThickness="1"
Stroke="Black"
StrokeDashArray="1 2"
SnapsToDevicePixels="true"
Visibility="Hidden"/>
<Border x:Name="Bd"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="focusVisualStyle" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
关于WPF:如何以编程方式提供键盘焦点位于列表框中的视觉反馈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238790/
当我尝试以非整数的步长(例如,每帧 0.5 像素)在屏幕上移动图形对象时,这会导致移动不稳定和“滞后”;因为对象只会每两帧移动 1 个像素。 我理解为什么会发生这种情况,因为对象的 x/y 值必须是整
市面上有大量的家谱应用程序,但出于某种原因,我找不到一个示例来说明如何为 Android 应用程序创建一个。我是否使用 Canvas ,是否有图表库? 我的基本要求是画一个三层的树(节点)图/图表,其
[ {name: 'John'}, {name: 'Plasmody'}, {name: 'Kugelschreiber'}, {name: 'Sarrah'}, ] 如果我在 J并做
我试图定位所有没有 www 的链接。在数据库中。 https://launchhousing.org.au 并替换为 https://www.launchhousing.org.au 我使用了“搜索和
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我需要排除具有以下模式的文件: ProjectFoo.Data[0-9]{14}.lgp 如何将 RegEx 用于 (Visual)SVN 忽略列表? 最佳答案 subversion 忽略列表不支持正
我正在寻找在处理中创建该项目的方法,但是,我发现该术语有点困难。我不确定如何调用在整个歌曲中线条永久保持的效果来“绘制”音乐数据。 对于我可以查看哪些教程或某人的回答,我将不胜感激。 我的目标是创建尽
我正在尝试为 android 制作游戏。我目前已将所有美术资源加载到 drawables 文件夹中,但我的问题是如何实际引用特定资源来渲染它? 我知道每个文件都有一个唯一的@id,我可能必须在onDr
Closed. This question is off-topic。它当前不接受答案。
只是一个简单的问题。 有一个简单的可视化工具可以生成iOS/QuartzCore的源代码吗? 例如,我会制作一个带有路径和a的CAKeyframeAnimation(例如CGPathMoveToPoi
编辑 3:我想这已经解决了。我刚刚启用了古腾堡编辑器并发现了它的“经典编辑器”部分,即代码编辑器。我唯一需要习惯的是我无法轻易修改的编辑器行高,这还不错。这对我有用,它超过了修改 functions.
我想在具有背景 slider 的可视 Composer 行内创建一个下拉菜单,最重要的是我要切换的链接。我在编辑自定义 css 时面临的问题是链接没有设置为 bottom:0;已设置position:
我正在学习 C++,并且了解一点 Visual Basic 和 Delphi。 但我想知道,有没有像 Delphi 这样的程序,但适用于 C++。您可以将按钮拖到窗体上,双击它,就像在 Delphi
我正在努力使用 pygame 初始化 OpenGL 显示。和pyopengl . import pygame pygame.init() pygame.display.set_mode((1920,
不确定我做错了什么。我创建了一个主题,除了我在可视化编辑器中创建帖子外,一切都很好。对我来说,这很好,但大多数用户不了解 HTML,因此无法真正进入并编辑代码。 在元素检查器(Chrome)中,文章是
我正在编写一个 C# 程序,它接受一堆参数并对数据点进行一些转换,然后将它们绘制到屏幕上。 在我的一个表单上,我有一堆文本框,我都想执行相同的 KeyPress 事件。在我只做一个 switch 语句
我正在创建 UML 事件图,我需要使用发送和接受信号,但我似乎找不到它。我试图用谷歌搜索它,但我似乎找不到任何东西。有谁知道我在哪里可以找到它们,或者它们在 Visio 中不存在? 最佳答案 想知道为
是 Haskell for Visual Studio 2005兼容VS2008 SP1 ? 最佳答案 您最初问题的答案是否定的。visual haskell 的代码是用 Haskell 编写的,并通
我正在使用 Visual Composer 开发我的 WordPress 网站。 我需要包含一个可分页的容器,但如果它可以像幻灯片一样就更好了。 This is my pageable contain
有哪些 Web 应用程序可以让我直观地(通过单击)使用任何 REST API 并生成一些代码(以任何语言)来捕捉我所描述的视觉内容? 与 Swagger 或 Google API Playground
我是一名优秀的程序员,十分优秀!