如何直接在 WPF 中使用自定义依赖项属性
本文关键字:自定义 依赖 属性 何直接 WPF | 更新日期: 2023-09-27 18:33:40
编辑:我使用枚举根据Thorstens Answer更改了代码,但没有工作。
我正在使用依赖项属性来影响我正在创建的 WPF 控件。我是 WPF 的新手,所以我不确定我做错了什么,我找不到合适的文章来解释它。
例如,我正在尝试通过 Dep 属性定义控件的可见性。在这种情况下,属性将是这样的:
public static readonly DependencyProperty IconVisibilityBoldProperty =
DependencyProperty.Register("IconVisibilityBold", typeof(Visibility), typeof(RTFBox),
new PropertyMetadata(Visibility.Hidden), VisibilityValidateCallback);
private static bool VisibilityValidateCallback(object value)
{
Visibility prop = (Visibility) value;
if (prop == Visibility.Hidden || prop == Visibility.Visible)
{
return true;
}
return false;
}
public Visibility IconVisibilityBold
{
get
{
return (Visibility)GetValue(IconVisibilityBoldProperty);
}
set
{
SetValue(IconVisibilityBoldProperty, value);
}
}
编辑:对于正确的 XAML,请查找 Slugarts 答案。此目的 XAML 条目(在本例中为切换按钮)将是
<ToggleButton Visibility="{Binding Path=IconVisibilityBold}" ToolBar.OverflowMode="Never" x:Name="ToolStripButtonBold" Command="EditingCommands.ToggleBold" ToolTip="Bold">
<Image Source="Images'Bold.png" Stretch="None"/>
</ToggleButton>
我已经输出了属性,它显示为元数据默认值应该暗示的"隐藏",但显然我对绑定做了一些错误。我必须在那里写什么?
您正在尝试绑定到父控件的属性而不引用它,并且不会隐式设置它。 您需要将 ToggleButton 绑定中的 ElementName 设置为要创建的用户控件的名称(如果还没有属性,则为其指定 x:Name 属性)。
<UserControl x:Name="rtfBox">
<ToggleButton Visibility="{Binding ElementName=rtfBox, Path=IconVisibilityBold}" ... />
...
</UserControl>
此外,您还应该遵循前面的答案,这些答案正确指出可见性属性是枚举而不是字符串。
ToggleButton
的 Visibility
属性需要一个 System.Windows.Visibility
类型的值。您需要更改代码以使用它而不是字符串:
public static readonly DependencyProperty IconVisibilityBoldProperty =
DependencyProperty.Register("IconVisibilityBold", typeof(System.Windows.Visibility), typeof(RTFBox));
public System.Windows.Visibility IconVisibilityBold
{
get
{
return (System.Windows.Visibility)GetValue(IconVisibilityBoldProperty);
}
set
{
SetValue(IconVisibilityBoldProperty, value);
}
}
所以你的属性是一个字符串...但它必须是可枚举的:
namespace System.Windows
{
public enum Visibility : byte
{
Visible,
Hidden,
Collapsed,
}
}
您必须绑定文本框数据上下文或将其用作引用才能正确访问属性