繁体   English   中英

WPF设计时属性

[英]WPF Design-time property

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

就像这个问题一样: UserControl Dependency属性设计时间

...它在运行时效果很好,但是我似乎无法在设计时反映出来。 但是,重新启动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));
}

有任何想法吗?

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

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);
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM