2017-08-22 7 views
0

私は、ResourceDictionaryで追加されたRectangleGeometryとしてクリッピングマスクを持つBorderを持っています。私はRectangleGeometryの長方形の背後にあるコードの値に応じて高さを変更したいが、高さだけをバインドする方法はわからない。RectangleGeometryの高さのバインド

クリップでボーダー:

<Border Width="50" Height="50" Background="#F0F1F3" CornerRadius="4"> 
    <Border.Clip> 
     <RectangleGeometry Rect="0, 0, 50, 10" /> 
    </Border.Clip> 
</Border> 

私はここに同様の質問にいくつか答えが見つかりました: https://social.msdn.microsoft.com/Forums/vstudio/en-US/7c7dbdc9-3fdb-4893-ab1f-082df9594f25/rectanglegeometry-binding?forum=wpf をし、同じことを行うことを試みた - プロパティを多追加しますが、何をすべきか分かりません今のところ:

<RectangleGeometry.Rect> 
    <MultiBinding Converter="{StaticResource Converter}"> 
     <Binding ElementName="mainGrid" Path="Width"/> 
     <Binding ElementName="mainGrid" Path="Height"/> 
    </MultiBinding> 
</RectangleGeometry.Rect> 

ここで原点を定義する方法は?どのように幅と高さの値を指定するのですか? ElementNameには何を入れますか?

+0

MultiBindingのコンバータの変換方法からのRectを返します入力バインディングが生成するすべての値。単一の値にバインドしたい場合は、MultiBindingは必要ありません。通常のバインディングのコンバーターは、ソース値を適切なRectに変換できます。 – Clemens

+0

「コードビハインドからの価値」はどのように定義されていますか? – mm8

+0

public int DownloadProgressAsImageHeight { //表示ボックス内の画像の高さのポイントへのパーセンテージを変換します。 get {return(int)((DownloadProgress/100)* _iconBoxHeight); } } – Val

答えて

0

DownloadProgressプロパティを設定するときはいつも、RectのプロパティをRectangleGeometryに設定しているようです。

<Border Width="50" Height="50" Background="#F0F1F3" CornerRadius="4"> 
    <Border.Clip> 
     <RectangleGeometry x:Name="rect" /> 
    </Border.Clip> 
</Border> 

...そしてあなたがDownloadProgressプロパティを設定した後にそのRect財産権を設定します:RectangleGeometryあなたのXAMLマークアップでx:Nameを与える

DownloadProgress = 10; 
rect.Rect = new Rect(0, 0, 50, (double)DownloadProgressAsImageHeight); 
+0

ひどいですが、コードビハインドは 'rect'オブジェクトを認識しません。おそらく' .xaml'ファイルではなく、リソース辞書に作成したからです。コードビハインドにオブジェクトの検索方法を伝える方法はありますか? – Val

+0

なぜボーダーをリソースとして定義しましたか? – mm8

+0

リソース辞書の中にあるDataTemplate内にあり、コードを追加する必要があります – Val

関連する問題