小编Luc*_*ini的帖子

当UserControl更改可见性时,请关注TextBox

我在画布中加载了一个usercontrol; 默认情况下,此usercontrol的可见性已折叠.当我的窗口的特定文本框被聚焦时,用户控件变得可见.

当usercontrol变得可见时,我想将焦点设置到usercontrol中的另一个文本框.

我试着这样做:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
        if (this.Visibility == Visibility.Visible)
        {                
            FocusManager.SetFocusedElement(this, TextBlockInput);
        }
}
Run Code Online (Sandbox Code Playgroud)

它似乎有用,但有一个问题:文本框看起来很集中,但光标到文本框不会闪烁,我不能输入字符输入.

我想在焦点后文本框已准备好输入.我能怎么做?

wpf user-controls textbox focus input

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

忽略PropertyInfo中的集合属性

我有一个这个代码的函数:

foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()){
//SOME CODE
if (propertyInfo.CanWrite)
    propertyInfo.SetValue(myCopy, propertyInfo.GetValue(obj, null), null);
}
Run Code Online (Sandbox Code Playgroud)

我会避免检查"收集"属性; 现在我已经插入此控件:

 if (propertyInfo.PropertyType.Name.Contains("List")
     || propertyInfo.PropertyType.Name.Contains("Enumerable")
     || propertyInfo.PropertyType.Name.Contains("Collection"))
     continue;
Run Code Online (Sandbox Code Playgroud)

但是,它不喜欢我!

这是一个更好的方法吗?

c# properties propertyinfo

9
推荐指数
3
解决办法
6805
查看次数

Wpf TextBox上的键盘小数分隔符,如何?

我有一个Wpf应用程序,带有一些用于十进制输入的文本框.

我想当我在pc键盘的数字键盘上按"点"键(.)时,它会发送正确的小数点分隔符.

例如,在意大利语中,小数点分隔符为"逗号"(,)...是否可以设置"点"键以在按下时发送"逗号"字符?

wpf textbox decimal textinput keypad

7
推荐指数
2
解决办法
5288
查看次数

WPF ComboBox和IsTabStop行为

ComboBox对WPF的控制有问题.

我试图将IsTabStop属性设置为控制但它不能按预期工作.

如果ComboBox不可编辑,则IsTabStop工作正常,但如果ComboBox可编辑,则始终从键盘导航中获得焦点. IsTabStop = false没有效果!

此外,当ComboBox可编辑且IsTabStop为真时,键盘导航到以前的控件是"锁定"..."Shift + Tab"不起作用!

这是一个WPF错误吗?有没有解决方法?

我正在使用.Net 4.0.

这是一个例子......

<Window
   x:Class="MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="MainWindow"
   Height="250"
   Width="600">

   <StackPanel
     Orientation="Horizontal"
     VerticalAlignment="Center">
     <TextBox
        Width="50"
        IsTabStop="True">
     </TextBox>
    <ComboBox
        Name="cmb1"
        Margin="10,0,0,0"
        Width="50"
        IsEditable="True"
        IsTabStop="False">
    </ComboBox>
    <DatePicker
        Name="dp1"
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="True">
    </DatePicker>
    <TextBox
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="False">
    </TextBox>
    <ComboBox
        Name="cmb2"
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="False">
    </ComboBox>
    <ComboBox
        Name="cmb3"
        Margin="10,0,0,0"
        Width="50"
        IsEditable="True"
        IsTabStop="True">
    </ComboBox>

   </StackPanel>
 </Window>
Run Code Online (Sandbox Code Playgroud)

尝试使用选项卡从第一个文本框导航到最后一个组合框..."cmb1"也使用IsTabStop = False,"cmb2"是好的因为它不可编辑,在"cmb3"上它不可能使用Shift + Tab返回到之前的控件. …

.net wpf combobox

5
推荐指数
2
解决办法
3230
查看次数

反思和复杂的属性

我有一个具有原始和复杂属性的对象.

我必须通过反思得到财产价值.

我用这句话:

Dim propertyInfo As PropertyInfo = MYITEM.GetType().GetProperty("MyProp1")
Dim propertyValue As Object = propertyInfo.GetValue(MYITEM, Nothing)
Run Code Online (Sandbox Code Playgroud)

并且it'ok,但如果我使用相同的代码与这样的复杂属性...

Dim propertyInfo As PropertyInfo = MYITEM.GetType().GetProperty("MyProp1.MyProp2")
Dim propertyValue As Object = propertyInfo.GetValue(MYITEM, Nothing)
Run Code Online (Sandbox Code Playgroud)

propertyInfo为null,我无法读取"MyProp2"的值.

存在一个通用的方法来做到这一点?

.net reflection properties propertyinfo

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

NHibernate 无状态插入行为

我想对我在 NHibernate 上的无状态会话中使用 INSERT 命令时发现的行为发表意见(注意。我使用 NHibernate 2.1.2)

情况是这样的

//STATEFULL SESSION
var session = sessionFactory.OpenSession()
using(var transaction = session.BeginTransaction()){
   var entity = new MyEntityType();
   entity.Id = 1;

   session.Save(entity);

   var entity2 = session.Get<MyEntityType>(1);  
   //OK! It returns saved entity...as I expect

   transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)

但是......在无状态会话中,行为发生了变化......

//STATELESS SESSION
var session = sessionFactory.OpenStatelessSession()
using(var transaction = session.BeginTransaction()){
   var entity = new MyEntityType();
   entity.Id = 1;

   session.Insert(entity);

   var entity2 = session.Get<MyEntityType>(1);  
   //entity2 IS NULL!!! Why?

   transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是...如何检查我是否已经在无状态会话的事务范围内插入了一个项目?

.net c# nhibernate hibernate

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

实现与另一个接口属性的IList的接口的类...如何?

我有两个这样的接口:

public interface IMyInterface1
{
    string prop1 { get; set; }
    string prop2 { get; set; }
}

public interface IMyInterface2
{
    string prop1 { get; set; }
    IList<IMyInterface1> prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经定义了两个实现接口的类:

public class MyClass1 : IMyInterface1
{
     public string prop1 {get; set;}
     public string prop2 {get; set;}
}

public class MyClass2 : IMyInterface2
{
     public string prop1 {get; set;}
     public IList<MyClass1> prop2 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

但是当我构建代码时,我有以下错误消息:

'ClassLibrary1.MyClass2'没有实现接口成员'ClassLibrary1.IMyInterface2.prop2'.'ClassLibrary1.MyClass2.prop2'无法实现'ClassLibrary1.IMyInterface2.prop2',因为它没有匹配的返回类型'System.Collections.Generic.IList'

如何在我班上实现IMyInterface2的"IList prop2"?

c# ilist properties interface class

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

将事件从C#转换为VB.Net ...如何?

我必须将C#代码转换为VB.NET,但我有一些问题....你能帮助我吗?

这是C#源代码:

public static event ValueEnterEventHandler CallEvent;

public static void DispatchCompanyCall(string moduleName)
{
     if (IsReady && CallEvent != null)
           CallEvent(null, new ValueEnterEventArgs(moduleName, false));
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

Public Shared Event CallEvent As ValueEnterEventHandler

Public Shared Sub DispatchCompanyCall(moduleName As String)
    If IsReady AndAlso CallEvent IsNot Nothing Then
        CallEvent(Nothing, New ValueEnterEventArgs(moduleName, False))
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

但我有这个错误消息:CallEvent是一个事件,不能直接调用,使用RaiseEvent语句来引发一个事件

我该怎么写?你能帮助我吗?谢谢.

.net c# vb.net events

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

来自代码的特定Cell的BeginEdit

是否可以使用DataGrid控件(WPF Toolkit)从代码后面开始编辑特定单元格?

我必须在按钮操作后启用所选行的第一个单元格的celledittemplate ...我该怎么办?

wpf datagrid templates toolkit cell

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

使用数千个项目优化WPF ComboBox搜索

我有一个WPF ComboBox控件,itemsSource为66000项.为了提高加载性能,我使用了VirtualizingStackPanel,没关系,但现在我还有另外一个问题.

ComboBox是可编辑的,当我在TextBox上键入时,它开始搜索SelectedItem以匹配...但它很慢并且不会立即响应键入的字符.

怎么能避免这种行为?

wpf performance combobox

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

将命令绑定到窗口标题栏的X按钮

我的WPF维护窗口有一个带有"退出"按钮的工具栏; CommandExit与此按钮绑定.CommandExit在退出之前执行一些检查.

现在,如果我单击关闭窗口按钮(标题栏的x按钮),则忽略此检查.

如何将CommandExit绑定到窗口x按钮?

wpf binding command window exit

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