簡體   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