0

DependencyPropertyAvalonドックコントローラーの開発に取り組んでいます。ここに私が現在取り組んでいるいくつかのサンプルコードがあります。

要件は次のとおりです。すべての依存関係プロパティを 1 つのクラスで作成し、View でプロパティにアクセスします。このようなもの。

<Button isPaneVisible="true"> or <Button isPaneVisible="{Staticresource path=name, Mode=twoway">

この問題を解決するのを手伝ってくれませんか?

namespace Avatar.UI.ViewModel
{
    internal class DependencyPropertyClass : DependencyObject
    {
        public static readonly DependencyProperty IsPaneVisibleProperty =
            DependencyProperty.RegisterAttached("IsPaneVisible", typeof(bool), typeof(DependencyPropertyClass),
                new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsPaneVisible_PropertyChanged));

        private static void IsPaneVisible_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
        }

        /// <summary>
        /// Sets the IsPaneVisible for an element.
        /// </summary>
        public bool IsPaneVisible
        {
            get { return (bool)GetValue(IsPaneVisibleProperty); }
            set
            {
                SetValue(IsPaneVisibleProperty, value);
            }
        }

    }
}

<UserControl x:Class="Avatar.UI.View.ContentView"             
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    
             mc:Ignorable="d" 
             xmlns:avalonDock="http://avalondock.codeplex.com"     
             xmlns:local="clr-namespace:Avatar.UI.ViewModel"             
             d:DesignHeight="300" d:DesignWidth="300">


<Button IsPaneVisible="true"></Button 

</UserControl>
4

3 に答える 3

3

添付された依存関係プロパティを定義するには、静的な get および set アクセサー メソッドの定義も必要です。詳細については、カスタム添付プロパティを参照してください。また、クラスが添付プロパティを定義するだけである限り、必ずしも DependencyObject から派生させる必要はないことに注意してください。しかし、パブリッククラスでそのようなプロパティを定義することは常に良い考えです。

public class DependencyPropertyClass
{
    public static readonly DependencyProperty IsPaneVisibleProperty =
        DependencyProperty.RegisterAttached("IsPaneVisible", typeof(bool), typeof(DependencyPropertyClass),
            new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsPaneVisible_PropertyChanged));

    private static void IsPaneVisible_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
    }

    public static bool GetIsPaneVisible(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsPaneVisibleProperty);
    }

    public static void SetIsPaneVisible(DependencyObject obj, bool value)
    {
        obj.SetValue(IsPaneVisibleProperty, value);
    }
}

Cyborgx37 が指摘したように、XAML で添付プロパティを次のように使用します。

<Button local:DependencyPropertyClass.IsPaneVisible="True" />
于 2012-12-10T14:46:01.340 に答える
1

私は間違っているかもしれませんが、あなたはこれを探していると思います:

<Button local:DependencyPropertyClass.IsPaneVisible="true"></Button>

IsPaneVisible は "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 名前空間の一部ではないため、名前空間を指定する必要があります。

参照:添付プロパティの概要

編集
これを行ってからしばらく経ちましたので、コードをスキャンすると、ゆっくりと戻ってきます。添付プロパティの場合、インスタンス プロパティを使用してプロパティを取得/設定することはできません。Get<PropertyName>静的およびSet<PropertyName>関数を作成する必要があります。

public static void SetIsPaneVisible(DependenyObject target, Boolean value)
{
    target.SetValue(IsPaneVisibleProperty, value);
}
public static bool GetIsPaneVisible(DependenyObject target)
{
    return (bool)target.GetValue(IsPaneVisibleProperty);
}

マジで… リンク先の記事を読んでください。そこですべて説明されています。

于 2012-12-10T13:56:25.777 に答える
0

依存関係プロパティは、依存関係プロパティを作成するベース カルスを派生させる必要があります。たとえば、ボタンの依存関係プロパティを作成する場合は、基本クラスのボタンをクラスに派生させます。

これが私の問題を解決した方法です。

于 2012-12-17T12:15:58.293 に答える