Wpf 无法获取附加的属性值

Wpf 无法获取附加的属性值,wpf,mvvm,attached-properties,Wpf,Mvvm,Attached Properties,嗨,我希望我能在这里找到一些帮助 我正在使用prism和MVVM创建一个WPF应用程序 我正在尝试创建我找到的附加属性 在我的ViewModel中,我通过 var control = Keyboard.FocusedElement; 那我会的 string value = ExtraTextBehaviourObject.GetExtraText(control as UIElement); 但是返回的值总是空的。。。有人能给我指一下正确的方向吗 更新 public class ExtraT

嗨,我希望我能在这里找到一些帮助

我正在使用prism和MVVM创建一个WPF应用程序

我正在尝试创建我找到的附加属性

在我的ViewModel中,我通过

var control = Keyboard.FocusedElement;
那我会的

string value = ExtraTextBehaviourObject.GetExtraText(control as UIElement);
但是返回的值总是空的。。。有人能给我指一下正确的方向吗

更新

public class ExtraTextBehaviourObject : DependencyObject
    {
        //Declare the dependency property
        public static readonly DependencyProperty ExtraTextProperty;

        static ExtraTextBehaviourObject()
        {
            //register it as attached property
            ExtraTextProperty = DependencyProperty.RegisterAttached("ExtraText", typeof(string),
                                                                    typeof(ExtraTextBehaviourObject));
        }

        //static function for setting the text
        public static void SetExtraText(UIElement uiElement, string value)
        {
            if (uiElement != null)
            {
                uiElement.SetValue(ExtraTextProperty, value);
            }
        }

        //static function for getting the text
        public static string GetExtraText(UIElement uiElement)
        {
            if (uiElement != null)
            {
                return (string)uiElement.GetValue(ExtraTextProperty);
            }
            return "";
        }
    }
在XAML中设置代码

<dxe:TextEdit Text="{Binding Path=Customer.Comments, Mode=TwoWay}" AcceptsReturn="True" VerticalContentAlignment="Top"
                                  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Behaviors:ExtraTextBehaviourObject.ExtraText="HelloExtraText"
                                  ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"/>


问题是我在使用Keyboard.FocusedElement时没有得到正确的控制。这可能是因为我使用了他们的控件。所以向上遍历元素树直到我得到那个控件解决了我的问题。。。谢谢你,克莱门斯

还有一个想法:您可以让WPF为您完成这项工作,而不是自己手动遍历树。使用
FrameworkPropertyMetadataOptions标记附加属性。继承
现在,设置附加属性的初始控件的所有子控件都可以检索该值。 比如说

<Grid MyService.MyProperty="True">
   <TextBox .../>


var txt = aSender as TextBox;
var val = MyService.GetMyProperty(txt);

var txt=aSender as TextBox;
var val=MyService.GetMyProperty(txt);
使用
Inherits
GetMyProperty
将返回
true
,因为它“继承”父网格中的值,如果不使用inherit,值当然将是
false
(不是null,因为它是一种值类型)


例如,
DataContext
也是一个继承的依赖属性。

您可能还应该发布属性的实现。感谢您的回复。。。我刚刚更新了“set”代码嗯,为什么您的类是从
DependencyObject
派生的?由于您使用的是
UIElement.GetValue()
UIElement.SetValue(…)
,因此您不需要它。永远不会调用SetExtraText。。。这可能就是问题所在。。。但是为什么呢?当在XAML中设置依赖属性时,WPF不会调用C#setter方法。因此,未调用SetExtraText并不意味着未设置属性值。无论如何,您真的确定
Keyboard.FocusedElement
返回的元素是您期望的元素吗?