1

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

我正在使用 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"/>
4

2 回答 2

0

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

于 2013-06-05T14:16:56.967 回答
0

只是一个额外的想法:您可以让 WPF 为您完成,而不是自己手动遍历树。现在标记您的附加属性FrameworkPropertyMetadataOptions.Inherits,您设置附加属性的初始控件的所有子级都可以检索该值。例如

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


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

WithInherits GetMyProperty将 return true,因为它“继承”了他的父 Grid 的值,没有继承的值当然是false(不是 null,因为它是一个值类型)。

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

于 2013-06-06T09:53:49.357 回答