Wpf 通过Xaml绑定获取另一个元素的实例(Attached或DependencyProperty)

Wpf 通过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

我有一个用例,我想从另一个元素获取对Xaml中一个元素的引用

例如,考虑这个简单的情况。我有一个名为a的用户控件和一个名为B的用户控件, 不知怎的,我想注册一个附加属性,在这里B可以得到A的引用

e、 g


所以我希望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);
    }