下面我有一个解决方案,用扩展方法从字段中获取属性.现在我想用方法而不是字段做类似的事情.
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)
这有可能以任何方式或我必须尝试完全不同的东西吗?
我有以下代码:
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不是属性宽度的有效值".
当我没有设置图像的宽度一切正常.不幸的是,宽度非常重要.
对不起代码格式错误,我没有发现如何使其格式化.
我想用一个按钮来实现一个 ItemsControl,该按钮向另一个 ViewModel 添加相同的内容。到目前为止,我有这个代码:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Controls:ItemView />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
该按钮应该始终是控件中的最后一项,并且应该只有一个添加按钮。有没有人有好的解决方案?我可以用丑陋的解决方法自己做,但我讨厌丑陋的解决方法:)
我想拆分这样的字符串:
"---你好---你好-------你好---再见"
进入这样的数组:
"你好" ; "你好你好" ; "再见"
我用这个命令试了一下:
test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,它将"-------"分成3个"---- hello".
编辑:
我无法修改文本,它是一个输入,我不知道它在我必须修改它之前的样子.
另一个例子是:
---例子---
---------示例文本--------
---例子2 ---
它应该只拆分带有3个连字符的连字符而不是带有更多连字符的连字符.