小编Han*_*abi的帖子

使用扩展方法访问方法的属性

下面我有一个解决方案,用扩展方法从字段中获取属性.现在我想用方法而不是字段做类似的事情.

public static MemberInfo GetMember<T, R>(this T instance, Expression<Func<T, R>> selector)
{
    var member = selector.Body as MemberExpression;
    return member?.Member;
}

public static T GetAttribute<T>(this MemberInfo meminfo) where T : Attribute
{
    return meminfo.GetCustomAttributes(typeof(T)).FirstOrDefault() as T;
}
Run Code Online (Sandbox Code Playgroud)

用法:

var attr = this.GetMember(x => x.AddButtonVisibility).GetAttribute<Test>(); 
Run Code Online (Sandbox Code Playgroud)

所以在我的情况下,用法应该是这样的:

var attr = this.GetMethod(x => x.SomeMethod).GetAttribute<Test>();
Run Code Online (Sandbox Code Playgroud)

这有可能以任何方式或我必须尝试完全不同的东西吗?

c# linq extension-methods custom-attributes

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

设置长度属性时,Code Behind中的WPF DataTemplate崩溃

我有以下代码:

    protected override DataTemplate _CreateDataTemplate()
    {
        DataTemplate dataTemplate = new DataTemplate();
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(DockPanel));
        factory.SetBinding(Panel.BackgroundProperty, new Binding(CellContentBindingPath.Replace(".ValueUser", ".Background")));
        dataTemplate.VisualTree = factory;
        var childFactory = new FrameworkElementFactory(typeof(Image));
        childFactory.SetValue(FrameworkElement.WidthProperty, 15);
        factory.AppendChild(childFactory);

        childFactory = new FrameworkElementFactory(typeof(TextBlock));
        factory.AppendChild(new FrameworkElementFactory(""));
        childFactory.SetBinding(TextBlock.TextProperty, !ShowZero ? new Binding(CellContentBindingPath)
                                                                   {
                                                                       Converter = new ValueToNothingConverter()
                                                                   } : new Binding(CellContentBindingPath));
        childFactory.SetValue(FrameworkElement.HorizontalAlignmentProperty, ContentAlignment);

        factory.AppendChild(childFactory);
        return dataTemplate;
    }
Run Code Online (Sandbox Code Playgroud)

错误是"15不是属性宽度的有效值".

当我没有设置图像的宽度一切正常.不幸的是,宽度非常重要.

对不起代码格式错误,我没有发现如何使其格式化.

c# wpf datatemplate

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

C# WPF:带有添加内容按钮的 ItemsControl

我想用一个按钮来实现一个 ItemsControl,该按钮向另一个 ViewModel 添加相同的内容。到目前为止,我有这个代码:

<ItemsControl ItemsSource="{Binding Items}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Controls:ItemView />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

该按钮应该始终是控件中的最后一项,并且应该只有一个添加按钮。有没有人有好的解决方案?我可以用丑陋的解决方法自己做,但我讨厌丑陋的解决方法:)

c# wpf itemscontrol

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

C#用多个字符拆分字符串

我想拆分这样的字符串:

"---你好---你好-------你好---再见"

进入这样的数组:

"你好" ; "你好你好" ; "再见"

我用这个命令试了一下:

test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

但这不起作用,它将"-------"分成3个"---- hello".

编辑:

我无法修改文本,它是一个输入,我不知道它在我必须修改它之前的样子.

另一个例子是:

---例子---

---------示例文本--------

---例子2 ---

它应该只拆分带有3个连字符的连字符而不是带有更多连字符的连字符.

c# regex

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