あなたBinding
は正しい方法で指定されていません。
現在指定している方法では、プロパティを介して現在設定/継承されているオブジェクトでBinding
80 というプロパティ (つまり ) を見つけ、その値を使用します。Path
DataContext
(プロパティ名は数字で始めることはできません。引用符で囲まれた構文がPath
とにかく間違っている可能性があると思います...したがって、Binding
間違っています....そして、コンバーターは呼び出されません)。
これを確認するには、アプリケーションのデバッグ中に Visual Studio の [出力] ウィンドウを確認します。エラーのあるバインディングについて通知されるはずです。詳細については、次のリンクを参照してください。
あなたの意図は、適切な値を計算するためにコンバーターに渡されるリテラル定数値を持つことだったと思います。
を使用する代わりに、を使用Converter
してそれを行うことを検討する必要があります.....はい、任意のオブジェクトにバインドし、80 値を....MarkupExtension
として渡すだけで、コンバーターで「ごまかす」ことができますConverterParameter
最善の方法と大きなクラッジ。
MarkupExtension の記述に関するリンクを次に示します。
...したがって、MarkupExtension
HeightAdjustedExtension : MarkupExtension などの派生クラスを作成します ....ProvideValue
受信データを集めることができる拡張機能にメソッドと「プロパティ」を実装します。
…ならこんな風に使えますよね…
ItemHeight="{myns:HeightAdjusted 80}"
これはテストされていませんが、次のようなものです (何かで遊ぶことができます):
public class HeightAdjustedExtension : MarkupExtension
{
[ConstructorArgument("height")]
public string Height { get; set; }
public HeightAdjustedExtension () { }
public HeightAdjustedExtension (string height)
{
Height = height;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
int theheight;
int.TryParse( Height, out theheight );
double ScreenHeight = (int)Window.Current.Bounds.Height;
double factor = 1050/(double)theheight ;
return (int)(ScreenHeight/factor);
}
}