我有一个带有该测试代码的自定义控件。然后我将控件放在面板上,并在预览设计器中看到它。然后我去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); }
}
答案 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这是不可能的。尝试在其他控件声明中绑定它。