zoukankan      html  css  js  c++  java
  • Silverlight:MouseDragElementBehavior无法应用于ListBox的变相解决办法

    Blend自带的行为MouseDragElementBehavior应用到ListBox后,如果用鼠标按住列表列拖动,没有任何效果,在多次尝试中意外发现,如果将ListBox的边框设置成一个较大值,在边框上点击时,却可以拖动,但是一般开发中,没人会把ListBox设置一个粗粗的难看边框。于是想到了下面的变通解决办法:当鼠标进入时显示边框,鼠标离开时再隐藏边框。

    示例代码:

    Xaml部分

    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" x:Class="sl_drag_sample.MainPage"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <Grid x:Name="LayoutRoot" Background="White">
    
            <ListBox x:Name="lbSample" MinHeight="50" MinWidth="100"  BorderThickness="0" HorizontalAlignment="Center" VerticalAlignment="Center" MouseEnter="ShowBorder"  MouseLeftButtonUp="HideBorder" MouseLeftButtonDown="ShowBorder"  MouseMove="ShowBorder" MouseLeave="HideBorder">
                <i:Interaction.Behaviors>
                    <ei:MouseDragElementBehavior/>
                </i:Interaction.Behaviors>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="这是测试文字">
                            <i:Interaction.Behaviors>
                                <ei:MouseDragElementBehavior/>
                            </i:Interaction.Behaviors>
                        </TextBlock>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
    </UserControl>
    

      

    Xaml.cs部分

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    
    namespace sl_drag_sample
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
    
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }
    
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                char[] s = "ABCDE".ToCharArray();
                lbSample.ItemsSource = s;
            }
    
            private void ShowBorder(object sender, MouseEventArgs e)
            {
                (sender as ListBox).BorderThickness = new Thickness(20.0);
            }
    
            private void HideBorder(object sender, MouseEventArgs e)
            {
                (sender as ListBox).BorderThickness = new Thickness(0.0);
            }
        }
    }
    

      

  • 相关阅读:
    常用浏览器内核
    点透问题及解决
    移动端click延迟和tap事件
    CommandoVM-虚拟机映像文件 | VM打开直接用
    Crackme006
    CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列
    拼多多被薅-谈网络安全中最后的屏障
    一次VB汇编中看-溢出计算
    CM005-逆向分析过程(上篇)
    CrackMe-005全破详解(图文+源码)--上篇
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2140106.html
Copyright © 2011-2022 走看看