大家好,
我有一个带依赖项属性的自定义控件。在Generic.xaml文件中,我有一个资源字典。它是外部字典中的资源字典,定义如下:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNamespace">
<!-- This is the dictionary-->
<ResourceDictionary x:Name="TheDictionaryImTalkingAbout" . . . >
.
.
.
</ResourceDictionary>
.
.
.
</ResourceDictionary>
在这个资源字典中,TheDictionaryImTalkingAbout,我想绑定到我的控件的依赖属性。我尝试了以下XAML:
<Object x:Key="MyObject" SomeProperty="{Binding MyDependencyProperty, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyNamespace:MyControl}}}"/>
绑定不会返回任何错误,但是它不起作用。谁能告诉我如何从Generic.xaml中的资源字典中绑定到我的父控件?
编辑:此绑定可用,但仅适用于某些属性。我无法将GradientStop Color绑定到color类型的依赖项属性。当这是UserControl时它被用来工作,但是现在我创建了一个自定义控件它不再起作用了。我不知道为什么,但如果你有兴趣,我在这里问这个问题:
Why can I no longer bind GradientStop Color to a Dependency Property of my control?
感谢所有帮助过的人,
达拉尔
答案 0 :(得分:1)
ResourceDictionary中的位置与RelativeSource FindAncestor Binding的解析无关。 Source在成为Visual Tree的一部分后在运行时解析。您发布的XAML中没有任何内容可用于诊断您遇到的问题。
不相关:是什么导致您选择在另一个ResourceDictionary中声明ResourceDictionary?
答案 1 :(得分:0)
您无法数据绑定到GradientStop,请参阅How to bind GradientStop Colours or GradientStops Property in Silverlight?
答案 2 :(得分:0)
我见过Wallstreet程序员的答案。因此,我不知道最后,绑定是否有效。但是你看到绑定的问题是,你必须声明UserControl所在的命名空间,然后在绑定中使用它。
在xaml上添加名称空间声明。如果命名空间是“WindowsApplication”,那么它将如下所示:
xmlns:local="clr-namespace:WindowsApplication"
然后在绑定中写下
<GradientStop Color="{Binding Scheme, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyControl}}}" Offset="0"/>
答案 3 :(得分:0)
如果有人有兴趣,这就是我从我的Generic.xaml中为自定义控件绑定到我的依赖属性的方法:
Generic.xaml的一部分:
<ContentControl x:Key="MyFooDepProp"
Content="{TemplateBinding local:MyControl.MyFoo}">
<!-- ... -->
</ContentControl>
<!-- ... -->
<Style TargetType="ContentControl">
<Setter Property="Content" Value="{TemplateBinding local:MyControl.MyFoo}" />
<!-- ... -->
如果您收到此消息:
&#39; MyFoo&#39;成员无效,因为它没有合格的类型名称
关键是使用TemplateBinding并使用类型名称为您的属性添加前缀(就像我做的那样:&#39; local:MyControl.MyFoo&#39;)