Wpf 无法获取附加的属性值
嗨,我希望我能在这里找到一些帮助 我正在使用prism和MVVM创建一个WPF应用程序 我正在尝试创建我找到的附加属性 在我的ViewModel中,我通过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
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
返回的元素是您期望的元素吗?