WPF小经验
Binding.IsAsync当属性值填充好后,与该属性绑定的界面才会开始加载(属性绑定优于控件加载)
private IList<string> _list; public IList<string> List { get { System.Threading.Thread.Sleep(3000); //省略代码 return _list; } }
首先想到的是在后台异步取数据,其实还有一个更简单的方法就是在绑定时将IsAsync设置为True
<ListBox ItemsSource="{Binding List, IsAsync=True, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:MainWindow}}}" Height="179" HorizontalAlignment="Left" Margin="76,31,0,0" Name="listBox1" VerticalAlignment="Top" Width="135" />
使用鼠标滚轮控制ListBox水平滚动条滚动
list.AddHandler(ListBox.MouseWheelEvent, new MouseWheelEventHandler(list_MouseWheel), true); 获得LisBox的ScrollViewer public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject { if (obj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is T) { return (T)child; } T childItem = FindVisualChild<T>(child); if (childItem != null) return childItem; } } return null; } private void list_MouseWheel(object sender, MouseWheelEventArgs e) { ItemsControl items = (ItemsControl)sender; ScrollViewer scroll = FindVisualChild<ScrollViewer>(items); if (scroll != null) { int d = e.Delta; if (d < 0) { scroll.LineRight(); } if (d > 0) { scroll.LineLeft(); } scroll.ScrollToTop(); } }
为什么不能从外部拖拽文件到管理员权限的程序中?
Windows Vista之后,规定非Adminstrator的进程无法drag&drop数据给Adminstrator的进程。由于EasiNote经常处于Adminstrator模式,所以无法从Explorer.exe中拖拽文件进去。
在win8下可以通过关闭UAC实现拖拽
HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > Policies > System,中的EnableLUA键值修改为0
但是此举会导致win8 Metro应用不能打开
手势滑动ScrollViewer
在ScrollViewer(或ScrollView中的子元素)上设置ScrollViewer.PanningMode属性可以实现支持手势滑动的ScrollViewer。
以这种方式实现手势滑动的ScrollViewer,在滑到顶部时继续下拉,会出现整个窗口被轻微拖动的现象(类似iOS的下拉回弹)。如果想禁用这种现象,
需要重写窗口的OnManipulationBoundaryFeedback方法,且不在其中调用父类的OnManipulationBoundaryFeedback方法。
protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e) { }
如何禁止触摸长按激发鼠标右键事件
在指定元素上设置 Stylus.IsPressAndHoldEnabled="False"即可达到效果。
TextBlock的文本溢出时,文本截取方式
TextBlock.TextTrimming截取溢出文本,
CharacterEllipsis 按照字符截取
WordEllipsis 按照单词截取
如何去除触摸点击反馈的“小圆点”
Stylus.IsTapFeedbackEnabled="False" 即可达到效果。
相关
附加属性名称
|
说明
|
备注
|
---|---|---|
Stylus.IsTapFeedbackEnabled | 获取或设置一个值,该值指示是否启用了点击反馈。 | 在 Windows Vista 中,在用户点击控件时会出现小动画。 默认情况下,在 InkCanvas 上点击反馈处于禁用状态。 在所有其他控件上则处于启用状态。 |
Stylus.IsTouchFeedbackEnabled | 获取或设置一个值,该值指示是否启用了触摸反馈。 | 在 Windows Vista 中,在用户用手指触摸控件时会出现小动画。 默认情况下,在 InkCanvas 上触摸反馈处于禁用状态。 在所有其他控件上则处于启用状态。 |
Stylus.IsFlicksEnabled | 获取或设置一个值,该值指示是否启用了笔势。 | 在 Windows Vista 中,笔势(可能的系统笔势之一)是指可以映射到导航或快捷方式命令的具有短、直、快特点的笔画。 默认情况下,在 InkCanvas、InkPresenter 和 ScrollBar 上禁用笔势。 在所有其他控件上笔势处于启用状态。 |
Stylus.IsPressAndHoldEnabled | 获取或设置一个值,该值指示是否启用了按住。 | 按住将映射为单击鼠标右键。 在 Windows Vista 中,如果您预见到用户可能会按住触笔而不打算模拟右击,则可以禁用此行为。(例如禁止触摸长按触发鼠标右键事件) |