2013-06-05 63 views
1

嗨,我希望我可以在這裏找到一些幫助...無法獲得附加屬性值

我正在創建一個使用棱鏡和MVVM的WPF應用程序。

我想創建一個附加的屬性,我發現here

在我的ViewModel我得到

var control = Keyboard.FocusedElement; 

聚焦元素那時我

string value = ExtraTextBehaviourObject.GetExtraText(control as UIElement); 

,但返回的值總是空...任何人都可以點我朝着正確的方向? ?

UPDATE

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"/> 
+0

你也許應該也發佈你的財產的實施。 – Clemens

+0

當然,爲什麼不! – sevdalone

+0

感謝您的回覆...我剛剛更新了「設置」代碼 – sevdalone

回答

0

問題設置代碼是,我沒有得到正確的控制,當我用Keyboard.FocusedElement。當我使用他們的控件時,這可能是一件顯而易見的事情。所以向上遍歷元素樹,直到我得到該控件解決了我的問題...謝謝Clemens!

0

只是一個額外的想法:而不是自己手動遍歷樹,你可以讓WPF爲你做。用FrameworkPropertyMetadataOptions.Inherits標記您的附屬財產現在,您可以通過設置附屬財產的初始控制的所有子項檢索該值。 例如

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


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

隨着InheritsGetMyProperty將返回true,因爲它「繼承」從他的父母電網的價值,當然沒有繼承值將是false(不爲空,因爲它的值類型)。

DataContext例如也是一個繼承的依賴項屬性。

+0

謝謝,我會試試這個以及... – sevdalone