我在XAML中看不到只读依赖属性

时间:2011-01-23 19:57:54

标签: wpf xaml dependencies properties readonly

我有一个带有该测试代码的自定义控件。然后我将控件放在面板上,并在预览设计器中看到它。然后我去xaml中定义控件并开始键入IsMouseOver ...但我找不到这个Dep。财产,为什么?我不想提供SETTTER但是我想向我的控件的用户提供用GETTER绑定到控件。

我错了什么?

// Register the private key to set the value
private static readonly DependencyPropertyKey IsMouseOverTestPropertyKey =
              DependencyProperty.RegisterReadOnly("IsMouseOverTest",
              typeof(bool), typeof(ElementTextBox),
              new FrameworkPropertyMetadata(false));

// Register the public property to get the value
public static readonly DependencyProperty IsMouseOverTestProperty =
              IsMouseOverTestPropertyKey.DependencyProperty;

// .NET Property wrapper
public bool IsMouseOverTest
{
    get { return (bool)GetValue(IsMouseOverTestProperty); }
    private set { SetValue(IsMouseOverTestPropertyKey, value); }
}

2 个答案:

答案 0 :(得分:3)

您所说的是您不希望用户能够设置此属性,例如像这样:

<ElementTextBox IsMouseOverTest="true" .../>

据我了解,这正是你得到的......你没有在intellisense中看到这个属性,因为你不能设置这个属性。

但您希望用户能够使用getter绑定到您的媒体资源,例如像这样:

<ElementTextBox x:Name="MyTextBox" />
<Popup IsOpen="{Binding ElementName=MyTextBox, Path=IsMouseOverTest}"/>

如果这是你想要的,那么我没有看到问题。你可以这样做。

如果您想要这样的话,我只能看到问题:

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty}" .../>

这不起作用,因为这是必需的。

您可能希望使用OneWayToSource模式设置此绑定,如下所示:

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty, Mode=OneWayToSource}" .../>

但它仍然无法正常工作,即使逻辑上也应如此。这是一个已知的限制。见https://connect.microsoft.com/WPF/feedback/details/523865/read-only-dependency-properties-does-not-support-onewaytosource-bindings?wa=wsignin1.0

答案 1 :(得分:0)

您重建了解决方案吗?有时IDE会将以前的版本保留在缓存中。

另外:在声明控件的xaml中你可以做的就是设置属性,因为你没有添加setter这是不可能的。尝试在其他控件声明中绑定它。