小编sam*_*mar的帖子

将原始处理程序的Event Arguments传递给wpf中的Routed Event

以下代码显示正常事件和路由事件.在这里,我使用相同的事件名称来解释目的,但实际上我只使用路由事件.

//Normal Event
public event SelectedHandler Selected;
public delegate void SelectedHandler(Object Sender, RoutedEventArgs e);

//Routed Event
public static readonly RoutedEvent SelectedEvent =
EventManager.RegisterRoutedEvent(
"Selected", RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(MyUserControl));

//add remove handlers
public event RoutedEventHandler Selected
{
    add { AddHandler(SelectedEvent, value); }
    remove { RemoveHandler(SelectedEvent, value); }
}
Run Code Online (Sandbox Code Playgroud)

我正在从几个事件处理程序中提取这些事件,如下所示

private void lstvMyView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    //Normal Event Raise
    if (Selected != null)
        Selected(this, e);

    //Routed Event Raise
    RoutedEventArgs args = new RoutedEventArgs(SelectedEvent);
    RaiseEvent(args);
}

private void lstvMyView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{ …
Run Code Online (Sandbox Code Playgroud)

c# wpf wpf-controls

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

在 wpf 中应用样式时,用户控件内的组合框消失

我正在尝试将样式应用于组合框,但组合框本身并没有应用,而是消失了。请检查以下用于用户控制的 xaml 代码。

<用户控制
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Microsoft_Windows_Themes =“clr命名空间:Microsoft.Windows.Themes;程序集=PresentationFramework.Luna”
    x:Class="Guardian.PAS.PASFramework.UI.WPF.PASComboBox"
    xmlns:local="clr-命名空间:Guardian.PAS.PASFramework.UI.WPF"
    高度=26 宽度=100 垂直对齐=中心>
    <用户控件.资源>
        <Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
            <设置属性=“模板”>
                <设置器.值>
                    <ControlTemplate TargetType="{x:Type local:PASCustomComboBox}">
                        <控制模板.触发器>
                            <触发器属性=“本地:PASCustomComboBox.IsEnabled”值=“假”>
                                <Setter属性=“背景”值=“红色”/>
                            </触发器>
                        </ControlTemplate.触发器>
                    </控制模板>
                </Setter.Value>
            </设置>
        </风格>
    </用户控件.资源>
    <画布名称=“画布”高度=“23”宽度=“自动”垂直对齐=“居中”>
        <标签高度=“23”名称=“lblCaption”宽度=“20”垂直对齐=“中心”>aaa</标签>
        <本地:PASCustomComboBox高度=“23”x:名称=“cmbComboBoxControl”VerticalAlignment=“中心”宽度=“50”
                  IsEditable="True" Style="{StaticResourcecomboBoxStyle}">
            </本地:PASCustomComboBox>
        <按钮高度=“23”名称=“btnSearch”宽度=“25”点击=“btnSearch_Click”可见性=“折叠”
                VerticalAlignment="中心">...</按钮>
        <标签高度=“23”名称=“lblDescription”垂直对齐=“中心”宽度=“20”前景=“蓝色”>

        </标签>

    </画布>
</用户控制>

这里 PASCustomComboBox 是一个继承自组合框的类。

public class PASCustomComboBox : ComboBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Down || e.Key == Key.Up)
        {
            e.Handled = true;
            return;
        }

        base.OnPreviewKeyDown(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

wpf wpf-controls

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

在wpf中的datagrid中的DataGridComboBoxColumn中进行排序

我有datagrid,其中有一列作为DataGridComboBoxColumn.显示现有数据,绑定itemsource,在选择更改时更新源工作正常.

问题是,当我点击DataGridComboBoxColumn的标题时,它不按字母顺序排序.当我检查它实际上按照值排序,而我希望它按显示排序.当我在网上搜索时,它说我应该使用"SortMemberPath"属性并将此属性分配给应该进行排序的属性.

在执行此操作时,排序仅在第一次单击标题时起作用,但在后续单击时,不会进行排序.我在网上搜索但无法找到解决方案.

以下是我的DataGridComboBoxColumn的xaml

<DataGridComboBoxColumn Header="Database Name" 
                        SelectedValueBinding="{Binding Path=Databases.DatabaseID, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
                        ItemsSource="{Binding Source={StaticResource ManageTablesVMInstance}, Path=Database}"  
                        SelectedValuePath="DatabaseID" DisplayMemberPath="DatabaseName" SortMemberPath="DatabaseName" />
Run Code Online (Sandbox Code Playgroud)

上面使用的一些术语的类型

数据库 - ObservableCollection

ManageTablesVMInstance - ViewModel的实例

数据库 - ObservableCollection

如果我方需要任何其他信息,请告诉我.我正在使用.net 4.0.

请帮忙.

提前致谢.

问候,

萨马

wpf wpf-controls wpfdatagrid datagridcomboboxcolumn

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

在.net中添加项目中dll的引用时会发生什么

我在.net中有一个类库项目说"A",它在构建时会创建一个dll,即"A.dll".我有另一个项目说"B",这个项目包含dll"A.dll"的引用.当我在B中添加A的引用时到底发生了什么?任何人都可以告诉我在编译期间和运行时期间会发生什么?

.net

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

在.net中强制继承

是否可以在.net中强制继承?

例如,我有一个类库项目,其中包含一个基类"BaseEntity".我有3个类说"EntityA","EntityB"和"EntityC",所有这些类都继承自这个基类.现在,当我在这个项目中创建另一个类时,.net应该给我一个编译时错误,该类不会从类"BaseEntity"继承.

.net inheritance

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

c# - 正则表达式从字符串中删除元音,除了第一个和最后一个字符

我试图从字符串中删除除第一个和最后一个字符之外的所有元音.我试过2个表达式并使用2种方法但是徒劳无功.我在下面描述了它们.有没有人有正则表达式?

例如

原始字符串 - source = apeaple

在regex之后 - source_modified = apple(这是预期的)

我尝试了表达式,([a-zA-Z])[aeiouAEIOU]([a-zA-Z])但这个表达式也删除了重复的字符.因此,当我应用上述表达式时,会发生以下情况

使用的代码 -

Regex reg = new Regex("([a-zA-Z])[aeiouAEIOU]([a-zA-Z])");
string source_modified = reg.Replace(source, "");

原始字符串 - source = apeaple

代码执行后 - source_modified = aple(删除重复字符)

使用的代码 - string source_modified = Regex.Replace(source, "([a-zA-Z])[aeiouAEIOU]([a-zA-Z])", "$1" + "$2");

原始字符串 - source = apeaple

代码执行后 - source_modified = apaple(只删除1个元音)

我也试过,([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])但这只删除1个元音而不是全部.因此,当我应用上述表达式时,会发生以下情况

使用的代码 -

Regex reg = new Regex("([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])");
string source_modified = reg.Replace(source, "");

原始字符串 - source = apeaple

代码执行后 - source_modified …

.net c# regex

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

收缩oracle 11g中的数据库

我无论如何都不是数据库管理员所以我在这里陈述一些事情可能是错的.

在SQL Server中,当我们在数据库中添加大量数据然后当我们删除它时,数据文件(.mdf文件)或数据库(或其所谓的任何内容)的大小不会减少到原始大小.我们需要缩小它.

在Oracle中,相同的基础是否有效?如果是,那么我该如何缩减Oracle 11g数据库呢?

oracle oracle11g

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

如何在VB6.0中获取集合的键

我正在调试一个VB 6.0应用程序,它可以处理很多集合.在一个这样的场景中,应用程序使用在文本框中输入的文本作为关键字从集合中获取对象.

现在我想知道在文本框中需要输入哪些键才能获取集合中所需的对象.

vb6

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

防止下拉区域在窗体中打开组合框控件

我在 Windows 窗体中有一个自定义组合框控件。我想实现一个功能,其中基于某些条件不应该显示下拉区域,即我需要根据某些条件阻止组合框打开。

我找到了一个可以实现这一点的链接,但它完全阻止了下拉区域的显示。此外,我无法根据我的方便调整该方法。这里给出链接。

c# winforms

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

签入一个对象数组

我有一个对象的数组说ClientsDTO[].对象中有一个属性Tin.我想检查数组中是否存在值.我有一种检查方法,即使用LINQ查询并获取满足条件的对象列表.如果返回的列表为null,则该值不存在于数组中.如果列表存在,则数组中存在值.以下是示例代码.

我想知道有没有比这更好的方式,即更优雅,更好的性能.我正在使用VS 2008,3.5框架.

ClientsDTO[] client = new ClientsDTO[10];

var lstclient = client.Where(c => c.TIN == anyNumber).FirstOrDefault();
if (lstclient == null)
{
    //value present in array
}
else
{
   //value not present
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

.net c# linq .net-3.5

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

在C#中创建浅层结构副本

我试图搜索我的答案并发现它们与C而不是C#所以想到发布它.

我的问题可能在这里微不足道.

根据我的理解(简单来说)

复制完成后

浅复制 - >主对象和复制对象(引用或值类型)应指向内存中的同一对象

DeepCopy - >主对象和复制对象(引用或值类型)应指向内存中的不同对象

继续这一点,我在C#中有一个结构,并尝试制作相同的浅层副本.我尝试使用"MemberwiseClone"方法,但我想它只适用于引用类型.对于值类型,我认为"MemberwiseClone"方法会将其装入对象并将其拆箱到堆栈中的不同内存地址.

我试过的如下.

我的问题是如何(如果可能的话)我可以创建一个简单结构的浅表副本?

我希望我的基本原理在这里是正确的,而不是说垃圾.如果我在任何陈述中出错,请纠正我.

问候,

萨马

struct MyStruct : ICloneable
{
    public int MyProperty { get; set; }

    public object Clone()
    {
        return this.MemberwiseClone();//boxing into object
    }
}


    private void btnChkStr_Click(object sender, EventArgs e)
    {
        MyStruct struct1 = new MyStruct();
        struct1.MyProperty = 1;

        //MyStruct struct2 = struct1; //This will create a deep copy
        MyStruct struct2 = (MyStruct)(struct1.Clone());//unboxing into structure hence allocating a different memory address
        struct2.MyProperty = 2;

        MessageBox.Show(struct1.MyProperty.ToString()); //still …
Run Code Online (Sandbox Code Playgroud)

.net c# clone deep-copy shallow-copy

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