以下是针对各种语言讨论的大量隐藏功能 . 现在我好奇XAML和WPF的一些隐藏功能?
我发现的是ListView的 Headers 点击事件
<ListView x:Name='lv'
Height="150"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
未列出GridViewColumnHeader.Click属性 .
Some of relevant features so far:
See also:
25 回答
3.5sp1将TargetNullValue引入绑定 . 如果输入值,这将绑定属性设置为Null,如果属性为Null,它将显示此值 .
3.5sp1将StringFormat引入绑定表达式,例如
Multibinding(与StringFormat结合使用):
还有PresentationTraceSources.TraceLevel技巧来调试任何特定场景中绑定的内容 . 您所要做的就是在WindowsBase程序集中引用System.Diagnostics名称空间
然后在绑定表达式中添加以下内容:
日志将是这样的:
有时你得到的字符串太长而无法在标签上显示 . 在这种情况下,我们可以使用
TextBlock
的 TextTrimming 属性来显示省略号MSDN Link
将Aero效果添加到窗口
Generics in XAML with x:TypeArguments
如果要在XAML中使用ObservableCollection,则需要创建一个派生自ObservableCollection的类型,因为您无法在XAML中声明它 . 使用XAML 2009,您可以使用x:TypeArguments属性来定义泛型类型 .
Show Tooltip on a disabled control
如果控件处于禁用状态,则Wpf允许在控件上显示工具提示 .
例如
Use of Non-Default Constructors with x:Arguments
在XAML 2006中,对象必须具有公共默认构造函数才能使用它们 . 在XAML 2009中,您可以使用x:Arguments语法传递构造函数参数 .
不是真正隐藏的功能,但使用WPF / XAML,你得到Bea Stollnitz和Josh Smith . WPF / XAML编程的女王和王者 .
标记扩展和附加属性是我最喜欢的功能,它们使您能够以非常优雅的方式扩展XAML“词汇表” .
Markup extensions
Attached properties
GridViewSort的来源(顺便说一句,它使用Ortus提到的
GridViewColumnHeader.Click
事件)您可以使用加号(
+
)在XAML中引用嵌套类型 . 例如,如果我们有这个类:我们可以使用以下语法在XAML中引用
SomeValue
:此语法为not documented on MSDN,并且不受官方支持 . 在MSDN论坛上有人asked about it,显然它打破了VS2010的WPF设计器 . 它在Microsoft Connect上有been reported .
网格大小共享(here's一个很好的例子) . 简而言之,即使跨越不同的网格,您也可以将网格列和行共享大小 . 对于那些使用DataGrids而不需要编辑数据的人来说,这将是非常宝贵的 .
PriorityBinding . 允许您在"first come first show"顺序中使用asyn绑定:
Use of Static Factory Methods with x:FactoryMethod
当您的类型没有公共构造函数但是静态工厂方法时,您必须在XAML 2006中的代码中创建该类型 . 使用XAML 2009,您可以使用x:FactoryMethodx:Arguments属性来传递参数值 .
高级“ Headers ”属性
另一件不太清楚的事情是我们习惯只包含文本的一些属性的内容 . 如果GUI元素的属性是Object类型,则很可能您可以添加包含一组控件的需要的面板,而不仅仅是设置文本 .
一个例子是MenuItem,其中
Header
属性(通常只包含文本)可以包含一组包含在面板控件中的gui元素(如果只需要一个,则只包含一个gui元素) .另请注意MenuItem上的
Icon
属性 . 这通常包含一个Image元素,但这也可以包含任何东西!XAML Converters
以下列表显示了WPF社区开发的转换器,用于将不同格式转换为XAML,反之亦然 .
Adobe Illustrator XAML Export Plugin
Adobe Photoshop to XAML Converter
Blender XAML Export Plugin
Lightwave XAML Export PluginVisio XAML Export
3D Studio Max to XAML Converter
Maya to XAML Converter
Flash to XAML Converter
SVG to XAML Converter
WMF/EMF to XAML Converter
Built-in Types
如果要在今天的资源字典中添加简单类型的对象(如string或double),则需要将所需的clr-namespace映射到XML名称空间 . 在XAML 2009中,我们提供了许多XAML语言中包含的简单类型 .
XAML语言包含以下类型:
Easy Object References with
如果要在今天创建对象引用,则需要进行数据绑定并使用ElementName声明源 . 在XAML 2009中,您可以使用新的{x:Reference}标记扩展
系统颜色用法
Support for Arbitrary Dictionary Keys
在XAML 2006中,所有显式x:Key值都被视为字符串 . 在XAML 2009中,您可以通过在ElementSyntax中编写密钥来定义您喜欢的任何类型的密钥 .
Set a ValidationError by Code
BindingExpression中的ValidatioRule仅在绑定的目标端发生更改时触发 . 如果要通过代码设置验证错误,可以使用以下代码段 .
设置验证错误
清除验证错误
The Ability to Stuff UIElement(s) into a TextBlock
我不知道它有多么有用(虽然它有资格隐藏)这是......但是当我first ran into it时它确实让我措手不及:
您可以认为以下xaml可能很有用(即在某些文本的末尾放置图形):
上面的xaml呈现如下:
Debugging Animations
常见错误
如果出现以下错误:无法在不可变对象实例上设置“(0) . (1)”动画 . 可能是您遇到以下限制之一:
您在不设置本地值的情况下设置依赖项属性的动画
您正在为依赖项属性设置动画,该属性的当前值是在未合并到资源字典中的另一个程序集中定义的 .
您正在为当前数据绑定的值设置动画
Binding without INotifyPropertyChanged or DependencyProperties
正如here所讨论的那样,你可以在没有INotifyPropertyChanged的情况下绑定一个普通的CLR对象属性,它就可以工作了 .
这是the Forumpost我指的是 .
引用:
这是关于这个问题的另一个great and detailed article .