Wpf 通过Xaml绑定获取另一个元素的实例(Attached或DependencyProperty)
我有一个用例,我想从另一个元素获取对Xaml中一个元素的引用 例如,考虑这个简单的情况。我有一个名为a的用户控件和一个名为B的用户控件, 不知怎的,我想注册一个附加属性,在这里B可以得到A的引用 e、 gWpf 通过Xaml绑定获取另一个元素的实例(Attached或DependencyProperty),wpf,silverlight,xaml,binding,Wpf,Silverlight,Xaml,Binding,我有一个用例,我想从另一个元素获取对Xaml中一个元素的引用 例如,考虑这个简单的情况。我有一个名为a的用户控件和一个名为B的用户控件, 不知怎的,我想注册一个附加属性,在这里B可以得到A的引用 e、 g 所以我希望B.TheOtherControl等于A。这在Xaml中可能吗?注意,我没有绑定到的属性,而是需要整个元素 任何使用DependencyProperties、AttachedProperties或行为的解决方案都可以在Xaml中实现这一点 Edit:我正在尝试在WPF和Silve
所以我希望B.TheOtherControl等于A。这在Xaml中可能吗?注意,我没有绑定到的属性,而是需要整个元素
任何使用DependencyProperties、AttachedProperties或行为的解决方案都可以在Xaml中实现这一点
Edit:我正在尝试在WPF和Silverlight4中执行此操作。我试过上面的方法,但没有效果,附加属性上的属性更改回调永远不会被命中 您可以将行为与设置为控件名称的属性一起使用,然后在逻辑树中搜索该控件。我有一个类似的事情,我希望一个控件上的某个事件将焦点移动到另一个控件。我通过为行为指定控件名来实现这一点
<TextBox Name="A"/>
<TextBox Name="B">
<Interactivity:Interaction.Behaviors>
<Behaviours1:ProgressNextOnEnterAction NextTextBoxControlName="A" />
</Interactivity:Interaction.Behaviors>
</TextBox>
好的,我想我知道发生了什么 按如下方式声明依赖项属性:
private static readonly DependencyProperty TheOtherControlProperty =
DependencyProperty.RegisterAttached(
"TheOtherControl",
typeof(MyCustomControl),
typeof(AttachedPropClass),// Change this part
null);
public static MyCustomControlGetTheOtherControl(MyCustomControltarget)
{
return (MyCustomControl)target.GetValue(TheOtherControlProperty);
}
public static void SetTheOtherControl(MyCustomControltarget, TextBlock value)
{
target.SetValue(TheOtherControlProperty, value);
}
我认为问题在于您将Dependency属性的OwnerType
设置为MyCustomControl
,而不是AttachedPropClass
我创建了一个有效的示例
试试看,如果我是对的,请告诉我
嗯,你试过了吗?你写的代码看起来很好…是的,我应该说,我试过了,但它不起作用。我还尝试了MyCustomControl上的DependencyProperty,并通过ElementName将B.TheOther绑定到a。两者都不起作用。我在dependency属性上有一个PropertyChanged回调,它从未被命中。那么,至少我没有做愚蠢的事情,而且上面的语法是正确的?可能还有其他问题。尝试了
BindsDirectlyToSource
?你能在这里复制你的附加属性吗?谢谢@ExitMusic-我不知道这个属性。那么在这种情况下会有什么样的例子呢?请记住,如果有帮助的话,我可以将其他控件作为MyCustomControl上的DependencyProperty而不是附加的道具来实现。谢谢你的示例,非常感谢。让我试试这个,然后再给你回复:)更新,这几乎就是我所拥有的,除了附加属性是在MyCustomControl中声明的(所以这两种类型是相同的)。不幸的是,无论我做了什么,我都无法让它发挥作用。无论如何谢谢你的帮助!奇怪的我看看是否可以重新创建它,那么“{Binding ElementName=A}”
是否有效?不知道!实际上,我最终使用了类似的方法。我创建了一个附加属性,它接受一个字符串并传入另一个元素的名称,然后进行VisualTree遍历以找到它。因此,可以通过AttachedProps完成,而不仅仅是行为。谢谢你的信息!:)
private static readonly DependencyProperty TheOtherControlProperty =
DependencyProperty.RegisterAttached(
"TheOtherControl",
typeof(MyCustomControl),
typeof(AttachedPropClass),// Change this part
null);
public static MyCustomControlGetTheOtherControl(MyCustomControltarget)
{
return (MyCustomControl)target.GetValue(TheOtherControlProperty);
}
public static void SetTheOtherControl(MyCustomControltarget, TextBlock value)
{
target.SetValue(TheOtherControlProperty, value);
}