- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WPF TextBox
白色背景。我给了它一些 Padding
这样文本周围就有一个“边距”(类似于 MS Word 中的边距)。
<TextBox x:Name="MyTextBox" Padding="25" />
TextBox
周围添加空间?那是空白的,但也是可编辑区域的一部分(这样它就会对点击/选择使用react,就像绿色部分的空白区域一样)?
Margin
的同时内部
TextBoxView
确实增加了文本周围的空间,该空间似乎仍然没有以任何方式“活跃”...而且看起来像
TextBoxView
没有
Padding
属性(property),所以我不能尝试(尽管我想
Padding
比
Margin
更有可能是解决方案)...
最佳答案
我真的很困惑为什么这不是一个受欢迎的问题。 TextBox 肯定具有违反直觉的填充行为。
查看 Microsoft 引用源以获取 TextBox 选择代码,但事实证明它太复杂而无法注入(inject)修复程序。所以 Behavior 附加属性似乎是实现这一目标的最简单方法。
xml:
<TextBox Padding="24 0" local:TextBoxSelectionBehavior.IsEnabled="True"/>
C#:
public static class TextBoxSelectionBehavior
{
public const double MAX_DISTANCE = 10;
private static TextBox control;
private static Point pos;
private static int start;
private static int cur;
private static double right;
private static bool drag;
private const double MAXDRAG = 12;
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(TextBoxSelectionBehavior), new UIPropertyMetadata(false, IsEnabledChanged));
public static bool GetIsEnabled(FrameworkElement obj) => (bool)obj.GetValue(IsEnabledProperty);
public static void SetIsEnabled(FrameworkElement obj, bool value) => obj.SetValue(IsEnabledProperty, value);
private static void IsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var v = (TextBox)d;
if ((bool)e.NewValue)
{
v.PreviewMouseDown += V_PreviewMouseDown;
v.PreviewMouseUp += V_PreviewMouseUp;
v.PreviewMouseMove += V_PreviewMouseMove;
v.LostFocus += V_LostFocus;
v.IsKeyboardFocusedChanged += V_IsKeyboardFocusedChanged;
}
else
{
v.PreviewMouseDown -= V_PreviewMouseDown;
v.PreviewMouseUp -= V_PreviewMouseUp;
v.PreviewMouseMove -= V_PreviewMouseMove;
v.LostFocus -= V_LostFocus;
v.IsKeyboardFocusedChanged -= V_IsKeyboardFocusedChanged;
}
}
public static readonly DependencyProperty ClickSelectsProperty = DependencyProperty.RegisterAttached("ClickSelects", typeof(bool), typeof(TextBoxSelectionBehavior), new UIPropertyMetadata(true));
public static bool GetClickSelects(FrameworkElement obj) => (bool)obj.GetValue(ClickSelectsProperty);
public static void SetClickSelects(FrameworkElement obj, bool value) => obj.SetValue(ClickSelectsProperty, value);
private static void V_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ChangedButton != MouseButton.Left) return;
if (control != null) { control.ReleaseMouseCapture(); control = null; }
if (e.OriginalSource is Grid g && (System.Windows.Media.VisualTreeHelper.GetParent(g) as FrameworkElement)?.Name == "PART_ContentHost")
{
control = (TextBox)sender;
pos = e.GetPosition(control);
var r = control.FindChild<ScrollContentPresenter>().Content as FrameworkElement;
right = r.TranslatePoint(new Point(r.ActualWidth, 0), control).X;
cur = start = control.GetCharacterIndexFromPoint(pos, true) + (pos.X >= right ? 1 : 0);
control.SelectionStart = start;
control.SelectionLength = 0;
control.Focus();
control.CaptureMouse();
drag = false;
e.Handled = true;
}
}
private static void V_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (control == null) return;
var p = e.GetPosition(control);
cur = control.GetCharacterIndexFromPoint(p, true);
control.SelectionStart = Math.Min(start, cur);
control.SelectionLength = Math.Abs(cur - start) + (p.X >= right ? pos.X >= right ? -1 : 1 : 0);
if (!drag) drag = Math.Max(Math.Abs(pos.X - p.X), Math.Abs(pos.Y - p.Y)) > MAXDRAG;
e.Handled = true;
}
private static void V_PreviewMouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (control == null) return;
control.ReleaseMouseCapture();
if (!drag && GetClickSelects(control)) control.SelectAll();
e.Handled = true;
control = null;
}
private static void V_LostFocus(object sender, RoutedEventArgs e)
{
if (control != null && control != sender) return;
if (control != null) control.ReleaseMouseCapture();
control = null;
}
private static void V_IsKeyboardFocusedChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (control != null && control != sender) return;
if ((bool)e.NewValue) return;
if (control != null) control.ReleaseMouseCapture();
control = null;
}
}
并且这个附加属性可以很容易地被一个通用的样式 setter 全局分配给一个文本框。
关于c# - 使 WPF 文本框边距可单击/可选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231590/
我需要默认提供多项选择,这样用户就不必按住 ctrl。希望得到一些帮助,谢谢。 最佳答案 $("#selectable").selectable(); $("#selectable").on(
有没有一种简单的方法可以在 Cocoa 中创建一个可选择的 NSRect?需要一个可以选择并在单击鼠标后保持选中状态的矩形。 谢谢。 最佳答案 NSRect 只是一个具有位置和大小的结构。它不是一个实
我不知道我使用 jQuery UI 的 .selectable() API 是否完全错误。该脚本的预期结果是在选择黑框 (div) 期间简单地获得一些警报: http://jsfiddle.net/j
我试图创建两个可选择的 div。 div 应该表现得像按钮。我希望能够使用左右箭头选择其中一个 div。到目前为止,我能够使用这段代码实现这一点 document.addEventListener("
你好 StackOverFlow 社区, 我有一个标准的 UIBezierPath 如下: let π:CGFloat = CGFloat(M_PI) override func drawRect(r
我有一个 WPF TextBox白色背景。我给了它一些 Padding这样文本周围就有一个“边距”(类似于 MS Word 中的边距)。 然而,与 Word 不同的是,文本周围的这个空白区域不是“事
我的问题:我动态生成列表,并且我想让它们可供选择。 例如: function gen() { //list generation $('#blank').append(listHtml
我已经为我的 DatePicker View 设置了一个 minDate() 。现在的问题是我仍然可以从指定的最短日期之前的日期中进行选择。 我的java: long thirtyDaysInMill
我正在使用 SWT 库在 Eclipse 中创建一个向导页面。到目前为止,我已成功创建页面,但只有一个问题:- 未选择 SWT 复合 Material 。 我的向导页面包含一个 scrolledCom
https://www.youtube.com/watch?v=SR28jj4nTEkthis是链接][1] 我想了解如何使 TextView 可选,选择并复制此链接,但此链接已失效,无法通过此链接访
我一直在 Android Studio 中开发一个简单的计算器应用程序。结果窗口(放置数字用于计算的位置)我最初设置为 TextView。但是,我还没有找到在使用 TextView 时实现光标的方法。
我正在尝试获得类似于 Facebook 使用的设置(如果他们使用 UITextView)。我希望自动检测链接,但我不希望 UITextView 中的任何其他文本可选。因此,用户可以单击链接但无法选择任
我想要一个不可选择的 UITableViewCell,而其附属 View (在我的例子中是 UISwitch)是可编辑的。 问题是我还有另外两个单元,其中一个需要保持事件状态;这与 iOS 日历应用程
我想知道 jQuery UI Selectable 上是否有一个选项可以让我禁用 Ctrl+Click,但仍保持可拖动以进行多项选择。在我的项目中,我希望人们能够选择多个,但只能通过拖动,而不是通过
这个问题在这里已经有了答案: Jquery selectable for range selection (slider behaviour) (3 个答案) 关闭 2 年前。 我想使用类似于 jQ
所以我几个小时以来一直在寻找解决方案,但我就是找不到我的错误。我使用循环创建了 JCheckBoxes 并将其添加到滚动面板中。但如果我检查它们,isSelected() 总是返回 false。 im
我想让 EditText 或 Textview 在我的 android 项目中可选。项目适用于 android 4.0+。我添加了这个:txtView.setTextIsSelectable(true
所以我有一张 Accordion 风格的 table 。单击一行时,会显示五个单选按钮。然后,用户应该能够单击这些按钮。它成功显示了按钮,但是当单击按钮时,它不是突出显示所选按钮,而是缩小了行本身。我
我有一大堆可选择的对象。 您可以单击它们,然后它们的 ID 会添加到表单中,取消选择它们时,它会再次从表单中删除。 我有一个工作版本,直到我注意到有时如果你点击太快,id 会被添加多次。 为了禁止这种
当我们已经在 html 页面中有 onselectstart="return false;" 时,有谁知道如何使用 javascript 使特定的 div 可选(复制/粘贴)
我是一名优秀的程序员,十分优秀!