WPF设计时属性

时间:2019-01-18 05:18:38

标签: c# wpf

我已经构建了一个UserControl,它基本上是一个网格,可以在每个末端具有圆角,也可以具有某个多边形。我有一个Rounded属性,可更改圆形边框和多边形的可见性以进行匹配(如果有人设置Rounded =“ True”,则圆形边框可见,多边形被隐藏,反之亦然。

就像这个问题一样: UserControl Dependency Property design time

...它在运行时效果很好,但是我似乎无法在设计时反映出来。但是,重新启动VS,清理解决方案,重新构建,更改构建目标等-这些步骤似乎没有什么不同。 我的课很基础:

public partial class MyBox : UserControl
{
    public MyBox()
    {
        InitializeComponent();
    }

    public bool Rounded
    {
        get { return (bool)GetValue(RoundedProperty); }
        set
        {
            SetValue(RoundedProperty, value);
            this.edgeRounded.Visibility = (value ? Visibility.Visible : Visibility.Hidden);
            this.edgePolygon.Visibility = (value ? Visibility.Hidden : Visibility.Visible);
        }
    }

    public static readonly DependencyProperty RoundedProperty = DependencyProperty.Register("Rounded", typeof(bool), typeof(MyBox), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我通过添加更改的事件处理程序,然后更改依赖项属性注册以引用它来使其工作。我的工作代码:

public partial class MyBox : UserControl
{
    public MyBox()
    {
        InitializeComponent();
    }

    public bool Rounded
    {
        get { return (bool)GetValue(RoundedProperty); }
        set { SetValue(RoundedProperty, value); }
    }

    public static readonly DependencyProperty RoundedProperty = DependencyProperty.Register("Rounded", typeof(bool), typeof(MyBox), new PropertyMetadata(false, RoundedChanged));

    private static void RoundedChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        bool value = (bool)e.NewValue;
        MyBox thisMyBox = (MyBox)sender;

        // Hide/show the edges
        thisMyBox.edgeRounded.Visibility = (value ? Visibility.Visible : Visibility.Hidden);
        thisMyBox.edgePolygon.Visibility = (value ? Visibility.Hidden : Visibility.Visible);
    }
}

答案 1 :(得分:0)

也许使用XAML将可见性属性绑定到数据上下文视图模型。 我已经做了各种各样的事情。