2016-11-03 20 views
0

オブジェクトのCanvas.TopプロパティとPanel.ZIndexプロパティをC#のコードでのみバインドする方法はありますか?私が得たい効果は、キャンバス上でオブジェクトが最も低く(高い頂点値)、Zプロパティが高くなるほど高くなります。私は、WPFに優しい新たなんだので、私はうまく把握することはできませんWPF:プログラムでCanvas.TopとPanel.ZIndexをバインドする

答えて

0

以下のようにバインディングを作成できます。 sourceプロパティが添付プロパティであるため、Path文字列の括弧が必要です。

element.SetBinding(Panel.ZIndexProperty, 
    new Binding 
    { 
     RelativeSource = RelativeSource.Self, 
     Path = new PropertyPath("(Canvas.Top)") 
    }); 

また、直接、このようなのPropertyPathコンストラクタにソースのDependencyPropertyを渡すことができます。

element.SetBinding(Panel.ZIndexProperty, 
    new Binding 
    { 
     RelativeSource = RelativeSource.Self, 
     Path = new PropertyPath(Canvas.TopProperty) 
    }); 

doubleからintへの変換は、フレームワークによって暗黙的に行われています。ただし、「スケーリング」の要素が必要な場合は、バインディングコンバータも追加する必要があります。

+0

それは完璧に動作します、ありがとう!私が欠けていたのは、新しいPropertyPath(Canvas.TopProperty) – user3489057

0

を行う方法あなたはこの試みることができる:

<Canvas> 
     <Border Panel.ZIndex="{Binding Location, Converter={StaticResource DoubleToIntConverter}}" Canvas.Top="{Binding Location}"/> 
    </Canvas> 

DoubleToIntConverterがダブルをとり、intを返しコンバータです。 場所は、ViewModelに格納されているDoubleです。

+0

私は純粋なC#で、xamlではなく:\ – user3489057

関連する問題