我正在为我的Avalon底座控制器DependencyProperty
工作。这是我目前正在处理的一些示例代码。
要求是:在一个单独的类中创建所有依赖项属性,并在View中访问该属性。这样的事情。
<Button isPaneVisible="true"> or <Button isPaneVisible="{Staticresource path=name, Mode=twoway">
你能帮我解决一下这个问题吗?
namespace Avatar.UI.ViewModel
{
internal class DependencyPropertyClass : DependencyObject
{
public static readonly DependencyProperty IsPaneVisibleProperty =
DependencyProperty.RegisterAttached("IsPaneVisible", typeof(bool), typeof(DependencyPropertyClass),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsPaneVisible_PropertyChanged));
private static void IsPaneVisible_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
/// <summary>
/// Sets the IsPaneVisible for an element.
/// </summary>
public bool IsPaneVisible
{
get { return (bool)GetValue(IsPaneVisibleProperty); }
set
{
SetValue(IsPaneVisibleProperty, value);
}
}
}
}
<UserControl x:Class="Avatar.UI.View.ContentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:avalonDock="http://avalondock.codeplex.com"
xmlns:local="clr-namespace:Avatar.UI.ViewModel"
d:DesignHeight="300" d:DesignWidth="300">
<Button IsPaneVisible="true"></Button
</UserControl>
答案 0 :(得分:3)
定义附加依赖项属性还需要定义静态get和set访问器方法。有关详细信息,请参阅Custom Attached Properties。另请注意,您的类不一定需要从DependencyObject派生,只要它只定义附加属性即可。但是在 public 类中定义这些属性总是一个好主意。
public class DependencyPropertyClass
{
public static readonly DependencyProperty IsPaneVisibleProperty =
DependencyProperty.RegisterAttached("IsPaneVisible", typeof(bool), typeof(DependencyPropertyClass),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsPaneVisible_PropertyChanged));
private static void IsPaneVisible_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
public static bool GetIsPaneVisible(DependencyObject obj)
{
return (bool)obj.GetValue(IsPaneVisibleProperty);
}
public static void SetIsPaneVisible(DependencyObject obj, bool value)
{
obj.SetValue(IsPaneVisibleProperty, value);
}
}
正如Cyborgx37指出的那样,你会在XAML中使用附加属性,如下所示:
<Button local:DependencyPropertyClass.IsPaneVisible="True" />
答案 1 :(得分:1)
我可能错了,但我认为你正在寻找这个:
<Button local:DependencyPropertyClass.IsPaneVisible="true"></Button>
您必须指定命名空间,因为IsPaneVisible不是“http://schemas.microsoft.com/winfx/2006/xaml/presentation”命名空间的一部分。
请参阅:Attached Properties Overview
修改强>
我已经有一段时间了,所以当我扫描你的代码时,事情正在慢慢回复给我。对于附加属性,您不能使用实例属性来获取/设置属性。您必须创建静态Get<PropertyName>
和Set<PropertyName>
函数:
public static void SetIsPaneVisible(DependenyObject target, Boolean value)
{
target.SetValue(IsPaneVisibleProperty, value);
}
public static bool GetIsPaneVisible(DependenyObject target)
{
return (bool)target.GetValue(IsPaneVisibleProperty);
}
说真的......请阅读链接的文章。这一切都在那里解释。
答案 2 :(得分:0)
依赖项属性应该派生您要为其创建依赖项属性的基本calss。例如,如果要为按钮创建依赖项属性,则将基类按钮派生到类中。
这就是我解决问题的方法。