我想学习WPF,但我发现很难理解绑定,“资源”和对象创建。 我的背景是C++/MFC和C#-Winforms。初学者 - 关于WPF中绑定和资源的困惑
我的问题:
大多数我看到的例子在XAML(可在MSDN和另外两个WPF的书我读过)使用静态资源的绑定表达式。这些与静态成员有什么关系?或者这只是一个误导性的名字?当引用任何对象作为StaticResource时,它是什么时候实例化的?
至于我可以看到StaticResources与应用程序/窗/控制的“资源”部分等中定义的“东西”用
现在,这些资源的部分都非常混乱给我。 他们究竟是什么?从我在MFC中的经验来看,这些是图标,字符串等。然而,从我看到的所有例子来看,在WPF中,这些似乎本质上是一个“倾销地”,它们可以用于各种全局对象定义在标记中(样式,数据模板等) (b)标记中的各种全局对象实例 我正确吗?这让我感到非常混乱。
它主要包括学习XAML中的各种半DSL(用于定义样式,用于定义数据模板,用于创建对象等),并将它们粘在一起放在同一个地方。 我一直在想,如何在MFC中手动编辑资源文件(.rc)。至少在那里这些部分是分开的,每种资源的语法都比较简单。为了解决前面两个问题:当我在Resources部分中定义一个对象实例,并且稍后从StaticResource绑定中引用它时,它的实例是什么时候? MSDN说,(在“如何:使数据可用于XAML绑定”):
一个办法可以使对象 可结合是 它定义为一个资源
但是,这不是很清楚。他们的意思是什么?他们的意思是创建?他们的意思是连接绑定子系统吗?何时该对象创建为? 从一个简单的例子中,我看到WPF似乎为它创建这个对象,当它试图附加绑定。这更令人困惑。
编辑: 经过下面karmicpuppet的澄清之后,我仍然对这是如何连接到绑定感到困惑。 假设我有我的资源:
<local:Person x:Key="MyPerson" Name="Title"/>
(其中人是一个名为名称属性的类),然后在窗口中我有:
<TextBlock Text="{Binding Source={StaticResource MyPerson}, Path=Name}"/>
1)这是什么呢?它是否经历了相同的步骤 - 搜索资源并将其应用于Text属性? MyPerson对象是否在创建窗口时或之后创建? 2)我是否必须使用绑定机制绑定到Name属性?我不能像上面用myBrush那样直接绑定它吗?为什么我不能做这样的事情?
<TextBlock Text="{StaticResource MyPerson, Path=Name}"/>
它只是框架方面的近视吗?我认为我在这里失踪很大,但我似乎无法理解什么...
3)我尝试使用DynamicResource,但我对每一步我都非常困惑。 A)中加入在上面的代码我的单个窗口类一个DependencyProperty为DependencyObject(是此DependencyObject必要?)
public class SomeText : DependencyObject
{
public string Header
{
get { return (string)GetValue(HeaderProperty); }
set { SetValue(HeaderProperty, value); }
}
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(string), typeof(SomeText), new UIPropertyMetadata(0));
}
b)中添加了它的一个实例的Windows.Resources(这是必要的与DynamicResource?MSDN似乎说没有,但如果让我无法弄清楚如何做到在XAML下一步)
三)我都尝试:
Text="{Binding Source={DynamicResource HeaderText}, Path=Header}"
这给了我一个例外,
Text="{DynamicResource HeaderText}"
但我不明白的地方把路径Header属性。
这是我第五次尝试最近摆弄WPF,每次我都被这个看似简单的事情搞砸了。我已经阅读了2本书,并且我非常想了解MSDN文章,但是它们根本没有任何帮助。
等到你发现自己需要一次性即时动画.. – Blindy 2010-08-28 16:27:03