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中拖拽文件进去。

具体见http://blogs.msdn.com/b/patricka/archive/2010/01/28/q-why-doesn-t-drag-and-drop-work-when-my-application-is-running-elevated-a-mandatory-integrity-control-and-uipi.aspx

在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 中,如果您预见到用户可能会按住触笔而不打算模拟右击,则可以禁用此行为。(例如禁止触摸长按触发鼠标右键事件)

 

WPF小经验

上一篇:StringBuffer和StringBuilder


下一篇:leetcode——88.合并两个有序数组