0

编辑:我根据 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)将是

<ToggleButton Visibility="{Binding Path=IconVisibilityBold}" ToolBar.OverflowMode="Never" x:Name="ToolStripButtonBold" Command="EditingCommands.ToggleBold" ToolTip="Bold">
<Image Source="Images\Bold.png" Stretch="None"/>
</ToggleButton>

我已经输出了属性,它显示为“隐藏”,因为元数据默认值应该暗示,但显然我在绑定上做错了。我要在那里写什么?

4

3 回答 3

2

您正在尝试绑定到父控件的属性而不引用它,并且它不会被隐式设置。您需要将 ToggleButton 绑定中的 ElementName 设置为您正在创建的 UserControl 的名称(如果它还没有 x:Name 属性,则给它一个 x:Name 属性)。

<UserControl x:Name="rtfBox">
<ToggleButton Visibility="{Binding ElementName=rtfBox, Path=IconVisibilityBold}" ... />
...
</UserControl>

此外,您应该遵循前面的答案,这些答案正确地指出 Visibility 属性是一个枚举而不是一个字符串。

于 2012-05-10T09:28:18.277 回答
1

所以你的属性是一个字符串......但它必须是一个可枚举的:

namespace System.Windows
{
    public enum Visibility : byte
    {
        Visible,
        Hidden,
        Collapsed,
    }
}

您必须将文本框绑定到数据上下文或将其用作正确访问属性的参考

于 2012-05-10T09:12:19.843 回答
1

的属性需要一个类型的ToggleButton值。您需要更改代码以使用它而不是字符串:VisibilitySystem.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);
 }
}
于 2012-05-10T09:15:48.370 回答