在保留粘贴文本中的选项卡的同时,是否有一些优雅的方法允许粘贴到AcceptsTab设置为false的WPF TextBox中?
当AcceptsTab为true时,用户将无法使用选项卡移至下一个控件,这是我的用户所不希望的。但是他们希望粘贴的选项卡被当前替换为空格。
谢谢
答案 0 :(得分:2)
我不确定这是否符合要求,但可以使用,但可能不够理想(例如,右键单击文本框并从上下文菜单中选择“粘贴”)。
请参见Paste Event in a WPF TextBox
在处理Ctrl-V之前将AcceptsTab设置为true,然后在执行以下操作后将其还原:
XAML:
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${dep.groupId}</groupId>
<artifactId>${dep.artifactId}</artifactId>
<version>${dep.version}</version>
<type>nar</type>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
<destFileName>${dep.artifactId}-${dep.version}.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
C#:
<TextBox AcceptsTab="False"
Height="200"
PreviewKeyDown="TextBox_PreviewKeyDown"
KeyUp="TextBox_KeyUp"/>
这可能会变成一种行为,因此可以轻松地将其应用于更多文本框而无需编写代码。
答案 1 :(得分:1)
另一种方法是将AcceptsTab设置为 true 并在按下(Shift)Tab时移动焦点。
好的副作用是,所有复制/粘贴方案仍将起作用,但用户将无法键入选项卡。
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
var textBox = sender as TextBox;
if (textBox != null)
{
var direction =
e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift)
? FocusNavigationDirection.Previous
: FocusNavigationDirection.Next;
textBox.MoveFocus(new TraversalRequest(direction));
}
}
}