小编Mat*_*ten的帖子

在滚动条上的WPF TreeView中拖放

我们在我们的应用程序和窗口中使用MVVM模式,我们有两个TreeView允许从第一个树中拖动项目并将其放在第二个树上.为了避免代码落后,我们使用行为绑定对ViewModel的拖放.

该行为实现非常类似于此示例,并且像魅力一样工作,有一个错误.

场景是一个比显示它的窗口大的树,因此它有一个垂直滚动条.当选择一个项目并且用户想要滚动时,程序开始拖放(这会阻止实际滚动,因此不是我们想要的).

由于滚动条包含在TreeView控件中,因此这并不奇怪.但是我无法确定鼠标是否在滚动条上方.

TreeViewItems通过主题使用边框,面板等为代表,所以一个简单的InputHitTest并不像人们想象的那么简单.

有没有人遇到过同样的问题?

如果需要更多代码覆盖问题,我可以粘贴.xaml中的一些行.


编辑

合并Nikolays链接我使用IsMouseOverScrollbar方法解决了问题,如果将来有人遇到此问题,必须通过以下方式更改上面的代码:

private static void PreviewMouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton != MouseButtonState.Pressed || startPoint == null)
        return;

    if (!HasMouseMovedFarEnough(e))
        return;

   if (IsMouseOverScrollbar(sender, e.GetPosition(sender as IInputElement)))
   {
       startPoint = null;
       return;
   }

   var dependencyObject = (FrameworkElement)sender;
   var dataContext = dependencyObject.GetValue(FrameworkElement.DataContextProperty);
   var dragSource = GetDragSource(dependencyObject);

   if (dragSource.GetDragEffects(dataContext) == DragDropEffects.None)
        return;

   DragDrop.DoDragDrop(
            dependencyObject, dragSource.GetData(dataContext), dragSource.GetDragEffects(dataContext));
}


    private static bool IsMouseOverScrollbar(object sender, Point …
Run Code Online (Sandbox Code Playgroud)

c# wpf treeview drag-and-drop behavior

8
推荐指数
1
解决办法
2393
查看次数

如何使用cultureinfo删除千位分隔符?

我尝试删除千位分隔符,所以我正在尝试一些代码,但它抛出异常.我试着用Convert.ToDouble,Convert.ToDecimal等等.

它说:

Convert.ToDouble("1.234,45")抛出'System.FormatException'的异常

转换是从行抛出的: Convert.ToDouble()

该参数n2使用culturinfo,但我也试过"0.00"都抛出相同的异常

整个想法是:如何删除千位分隔符,我的输入始终采用以下格式:1.234,54(逗号为十进制,点为千分隔符)...我喜欢在Textbox GotFocus事件中使用..所以格式应显示为12345,45

所以:1.254,45应该是1254,45和1.254,00应该是1254,00

 //http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be");
NumberFormatInfo nfi = (NumberFormatInfo)ci.NumberFormat.Clone();
//Now force thousand separator to be empty string
nfi.NumberGroupSeparator = "";
//Format decimal number to 2 decimal places
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("0.00", nfi);
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi);
Run Code Online (Sandbox Code Playgroud)

c# formatting cultureinfo string-formatting winforms

5
推荐指数
1
解决办法
6200
查看次数

LINQ中的速度提升Where(Array.Contains)

我最初有一个包含LINQ查询返回的方法,int[]然后以类似于以下的方式使用它:

int[] result = something.Where(s => previousarray.Contains(s.field));
Run Code Online (Sandbox Code Playgroud)

事实证明这是非常缓慢的,直到第一个数组被检索为本机IQueryable<int>.它现在运行得非常快,但我想知道如果我int[]从其他地方提供了一个必须如上所述使用的情况我将如何处理这种情况.

在这种情况下有没有办法加快查询速度?转换为列表似乎没有帮助.

c# linq arrays

3
推荐指数
1
解决办法
2773
查看次数

克隆WPF控件和对象层次结构

我有一些问题克隆一个对象hierarchie.它是用于建模应用程序的工具包,工具箱包含类实例作为原型.但是我很难克隆这些:)

以下代码显示了问题:

public abstract class Shape {
  protected List<UIElement> elements;
  private Canvas canvas;
  ...
  public Canvas getCanvas() { ... };
}

public class MovableShape : Shape {
  protected ... propertyA;
  private ... propertyXY;
  ...
}

public abstract class AbstractLayout : MovableShape, ... {
  ...
}

public class SomeLayoutClass : AbstractLayout, ... {
  ...
}

public class AContainingClass {
  SomeLayoutClass Layout { get; set; }
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我将一个对象插入AContainingClass到我的项目工作表中时,它应该被克隆.到目前为止,我尝试了手动克隆(由于private基类中的字段而失败)和二进制序列化(BinaryFormatterMemoryStreams).

第一种方法缺乏调用base.clone()方法的方法(或者我错了?),后者不起作用,因为UIElements不是 …

c# wpf clone deep-copy

2
推荐指数
1
解决办法
7620
查看次数

OnPaint不会更新

我有一个包含用户控件的Windows窗体.此用户控件具有以下代码:

protected override void OnPaint(PaintEventArgs pe)
{
  base.OnPaint(pe);
  pe.Graphics.DrawRectangle(
       new Pen(Color.Red, 5 + laenge), 
       new Rectangle(
             new Point(50 + leerzeichen, hoehe), 
             new Size(laenge + 20, 20)));
}
Run Code Online (Sandbox Code Playgroud)

还有一些代码,现在可能并不重要.因此,当我启动程序时,它会绘制红色矩形.所有变量(laenge,leerzeichen,hoehe)在程序开始时设置为0.现在,当我按下按钮时变量正在变化,但是OnPaint不会绘制新的矩形?可能是什么问题呢?我是否必须以某种方式调用OnPaint?

c# onpaint

2
推荐指数
1
解决办法
1551
查看次数

如何在MVC 3中使用Model First方法验证搜索字符串?

我正在尝试使用C#验证MVC 3中的搜索框,这样当用户输入任何内容时,ViewBag中都会显示一条消息"请输入搜索查询".非常感谢任何帮助.

public ViewResult Index(string sortOrder, String searchString)
{
   ViewBag.NamesSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : "";
   ViewBag.UserSortParm = sortOrder == "UserID" ? "Name" : "Song";
   var User = from s in db.User select s;

   if (!String.IsNullOrEmpty(searchString))
   {
      User = Users.Where(s => s.Name.ToUpper().Contains(searchString.ToUpper())
                           || s.Songs.ToUpper().Contains(searchString.ToUpper()));
   }
   switch (sortOrder)
   {
      case "Name":
        Users = Users.OrderByDescending(s => s.Name);
        break;
      case "Songs":
        Users = Users.OrderByDescending(s => s.Song);
        break;
      default:
        Users = Users.OrderBy(s => s.Name);
        break;
   }

   // ...
}
Run Code Online (Sandbox Code Playgroud)

c# validation asp.net-mvc controller asp.net-mvc-3

1
推荐指数
1
解决办法
795
查看次数

按字母顺序排列给定字符串中的单词

我只是想编写一个代码来按字母顺序排列字符串中的单词..但每当我运行它时,它"进入一个无限循环......我无法弄清楚究竟发生了什么......可以帮助我帮助我plzzz ..下面我附上了我的代码.

public class AscendString {
    String s=new String();

    public AscendString(String x)
    {
        s=x.trim();
    }

    public int NoWords()
    {
        int i=0;
        String s1=new String();
        s1=s;
        while(s1.length() > 0)
        {   i++;
            int j=s1.indexOf(' ');
            if(j>0)
            {
                s1.substring(j+1);
                s1=s1.trim();
            }
            else
            s1="";
        }
        return i;
    }

    public void Ascend()
    {
        String str[]=new String[NoWords()];
        String s1=new String();
        s1=s;
        int i=0;
        while(s1.length() > 0)
        {
            int j=s1.indexOf(' ');
            if(j>0)
            {
                str[i]=s1.substring(0,j) ;
                s1=s1.substring(j+1);
                s1=s1.trim();
                i++;
            }
            else
            {
                str[i]=s1;
                s1="";
            }
        }
        for(int j=0;j …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
1万
查看次数

按值传递并在java中通过引用传递

我正在阅读有关Pass by Value和Pass的参考资料,我得到了很多文章,其中一些人说Java只遵循'按值传递',其中一些说原始和对象之间存在一些差异.所以我写了下面的示例代码并且还要输出.请评论和分享答案是什么.

我检查了Int,String,StringBuffer和Employee类,现在它仅作为Employee类的引用传递.

package test;
class Emp {
    public String name="";
    public int age=0;

    public Emp(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String toString() {
        return "Name: "+ this.name + "....Age: "+ this.age;

    }
}
public class Class1 {
    public Class1() {
        super();
    }

    public void doChange(int i) {
        i = i +10;
        System.out.println("Value of Integer in Method:>"+ i);
    }

    public void doChange(Emp i) {
        i.age=29;
        i.name="rishu";
        System.out.println("Value of Employee In Method …
Run Code Online (Sandbox Code Playgroud)

java oop core

0
推荐指数
1
解决办法
3233
查看次数