我想在双击时获得与窗口/根元素相关的元素的绝对位置.元素在它的父元素中的相对位置是我可以看到的,而我想要达到的是相对于窗口的点.我已经看到了如何在屏幕上获取元素点的解决方案,但不是在窗口中.
我有一个包含在div中的html元素.高度由外部div决定,输入控件的高度和宽度为100%.在最基本的层面上,我遇到的问题是文本框超出了包含div的权限.
基本示例代码:
<div style="height:25px; width: 150px;">
<input type="text" style="height:100%; width:100%" />
</div>
Run Code Online (Sandbox Code Playgroud)
这个控件的渲染比这复杂得多,但是当控制被剥离到这个级别时,我还有一个问题,即文本框突出了包含div.
我有一个WPF ListBox
控件,我将其设置ItemsSource
为项目对象的集合.如何将对象的IsSelected
属性绑定ListBoxItem
到Selected
相应项对象的属性,而不将对象的实例设置为Binding.Source
?
是否可以更改WPF ScrollViewer滚动的数量?我只是想知道是否可以更改滚动查看器,以便在使用鼠标滚轮或滚动查看器箭头时,可以更改增量滚动的数量.
当双击列表框中的项目时,我想创建一个视觉效果。到目前为止,我具有拖放功能,其中该项目在视觉上已附加到鼠标,并且可以移动到放置目标。通过该功能,我可以使用获取项目容器的相同逻辑对项目进行动画处理,但是我无法离开项目控件。有什么方法可以从ListBox中删除该项目并将其视觉化到另一个位置吗?基本上,主列表框是一手牌。双击卡片后,我希望它在视觉上从手形列表框移至丢弃列表框。到目前为止,将项目从一个集合移到另一个集合的逻辑是没有问题的,但是我真的很想要此事件的动画视觉表示。任何想法或参考如何做这样的事情将不胜感激。
谢谢,布兰登
有关我尝试过的内容的更多详细信息:有些概念我尚未掌握,这使我首先面对这堵墙。我有一种方法,可以将ListBox作为ItemsControl传入(有些可能是不必要的),作为Listbox项的FrameworkElement以及与ListBox项关联的数据对象。我试图做的是作为画布的ListBoxItem的FindVisualChild。我可以的 在我的脑海中,我想以某种方式将画布克隆为画布或位图,将其添加到同一位置的页面子级的子级中,从ListBox中删除ListBoxItem,然后将克隆设置为动画以丢弃桩。动画完成后,克隆将被删除或隐藏,并且在将该对象添加到丢弃桩集合中时,它将有效地替换克隆。
我的问题是,我觉得确实存在使用装饰器层或其他方法执行此操作的更简单方法。我也不知道如何将克隆放置在元素中与视觉树更远的完全相同的位置。我将继续努力并研究其他方法,我只是希望有人能对此有所了解。
背景:我正在创建一个自定义列表框,每个列表框项上都有单选按钮,所以基本上它将是一个RadioButtonList.控件完全由代码创建.截至目前,控件呈现并正确运行并支持2个方向(水平/垂直).列表框使用ItemTemplate,它是一个带有RadioButton和TextBlock的StackPanel.
到目前为止,我已经能够通过使用将其背景设置为透明的样式来防止项目的背景颜色在选择项目时更改.
我也想对前景色做同样的事情.
基本上,ListBox的Selection模式是单一的,当选择一个项目时,我只希望它被RadioButton反射.
我使用以下代码来设置ItemContainerStyle:
System.Windows.Style style =
new System.Windows.Style(typeof(System.Windows.Controls.ListBoxItem));
System.Windows.Media.SolidColorBrush brush =
new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);
style.Resources.Add(System.Windows.SystemColors.HighlightBrushKey, brush);
Run Code Online (Sandbox Code Playgroud)
我的模板的TextBlock是使用System.Windows.FactoryFrameworkElement创建的,如下所示:
System.Windows.FrameworkElementFactory factoryTextBlock =
new System.Windows.FrameworkElementFactory(typeof(System.Windows.Controls.TextBlock));
factoryTextBlock.SetBinding(System.Windows.Controls.TextBlock.TextProperty, new System.Windows.Data.Binding("Description"));
factoryStackPanel.AppendChild(factoryTextBlock);
Run Code Online (Sandbox Code Playgroud)
然后将FactoryTextBox附加到FactoryStackPanel并设置为ListBox的ItemTemplate.
目前,我在选择项目时将背景颜色设置为透明.由于文本默认设置为白色,因此在选择项目时它会直观消失.我正在寻找一种方法,在选择文本块的前景时设置颜色.现在它可以是黑色,但最终它会引用更高级别的字体颜色.
我有一个TextBox
和一个Popup
控件。我希望Popup.IsOpen
财产与财产绑定TextBox.IsFocused
。换句话说,如果文本框具有焦点,则弹出窗口打开。或者,如果弹出窗口处于焦点状态,我不希望它由于文本框失去焦点而关闭。我希望使用绑定来处理这个问题,而不是在事件处理程序中处理这个问题。另外,我是否必须对依赖属性执行任何操作,因为它们是预先存在的(即注册、覆盖元数据等),或者我可以只绑定到这些属性吗?
这是一些类似于我的场景的示例代码
StackPanel sp = new StackPanel();
TextBox tb = new TextBox();
Popup popup = new Popup();
sp.Children.Add(tb);
sp.Children.Add(popup);
this.Content = sp;
Binding bd = new Binding("IsFocused");
bd.source = tb.IsFocused;
popup.SetBinding(Popup.IsOpenProperty, bd);
Run Code Online (Sandbox Code Playgroud)
由此,我假设如果单击文本框控件并为其提供焦点,则弹出窗口将打开,反之,如果文本框失去焦点,则弹出窗口将关闭。我似乎无法让它发挥作用。
如果有人知道我做错了什么,那么也许他们也可以回答我问题的后半部分,即如果文本框失去焦点但弹出窗口接收焦点,则弹出窗口将保持打开状态或重新获得焦点到文本框,以便它在第一个绑定之后保持打开状态。当文本框失去焦点时获得焦点的任何其他控件不适用于此场景。
如果我可以为了清楚起见重新表述一下,我会这样说。
1.)绑定Popup.IsOpen
到TextBox.IsFocused
2.)绑定TextBox.IsFocused
到Popup.IsFocused
(假设这只会将焦点返回到文本框)
这是我的第一次 C# 尝试。有些事情还是不太对劲。什么也没发生,所以我不太确定我的错误在哪里。
StackPanel sp = new StackPanel();
TextBox tb = new TextBox();
Popup popup = new Popup();
TextBox popupTextBox = new TextBox();
popup.Child = popupTextBox; …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来查找基类标识符冒号和类的开头大括号之间的代码,该类已被存储到字符串文字中.
我的意思是说我有一堂课
public class Class : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)
它被存储为字符串
string classString = "public class Class : BaseClass{}\r\n"
Run Code Online (Sandbox Code Playgroud)
这个类肯定会更加详细,具有强类型,完全限定的基类和接口的潜力,但我需要一种方法来嗅出冒号和开放花括号之间的代码.
假设该类不是定义派生约束的泛型,即
public class LinkedList<K,T> : BaseClass
**where K : IComparable**
{
}
Run Code Online (Sandbox Code Playgroud)
那么可以安全地假设在类定义中会有一个冒号,并且很容易找到派生冒号和开口大括号.
如果是这样我就能做到
string baseClassString = classString.Substring(derivationColonIndex + 1, (openCurlyBraceIndex - (derivationColonIndex + 1)))
Run Code Online (Sandbox Code Playgroud)
任何人都可以想到一个更好的方法,保证我得到一个baseClass字符串和冒号和开口大括号之间可能存在的任何接口.
我需要这个的背景:基于来自数据库的数据生成类,如果db中的某些数据发生变化,那么我可能需要更改类字符串中的继承.因此,我将替换基类和接口的现有子字符串.
wpf ×6
listboxitem ×3
c# ×2
animation ×1
binding ×1
css ×1
data-binding ×1
focus ×1
html ×1
parsing ×1
regex ×1
scrollviewer ×1
selected ×1
textbox ×1