0

を持っており、 のでScreenHeightConverter使用したいと考えています。 ItemHeightGridView

しかし、デバッグしてもコンバーターにジャンプすらしないため、適切に使用しているかどうかはわかりません。

私のコード:

public class ScreenHeightConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        double ScreenHeight = (int)Window.Current.Bounds.Height;
        double factor = 1050/(double)value;
        return (int)(ScreenHeight/factor);
    }
}

<VariableSizedWrapGrid Margin="3" ItemHeight="{Binding '80',Converter={StaticResource ScreenHeightConverter}}" ItemWidth="255"/>
4

2 に答える 2

2

あなたBindingは正しい方法で指定されていません。

現在指定している方法では、プロパティを介して現在設定/継承されているオブジェクトでBinding80 というプロパティ (つまり ) を見つけ、その値を使用します。PathDataContext

(プロパティ名は数字で始めることはできません。引用符で囲まれた構文がPathとにかく間違っている可能性があると思います...したがって、Binding間違っています....そして、コンバーターは呼び出されません)。

これを確認するには、アプリケーションのデバッグ中に Visual Studio の [出力] ウィンドウを確認します。エラーのあるバインディングについて通知されるはずです。詳細については、次のリンクを参照してください。


あなたの意図は、適​​切な値を計算するためにコンバーターに渡されるリテラル定数値を持つことだったと思います。

を使用する代わりに、を使用Converterしてそれを行うことを検討する必要があります.....はい、任意のオブジェクトにバインドし、80 値を....MarkupExtensionとして渡すだけで、コンバーターで「ごまかす」ことができますConverterParameter最善の方法と大きなクラッジ。

MarkupExtension の記述に関するリンクを次に示します。

...したがって、MarkupExtensionHeightAdjustedExtension : 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);        
    }
}
于 2013-01-02T13:31:04.807 に答える
0

コンバーターのリソースを作成する必要があります。

まず、名前空間を追加する必要があります。例

xmlns:converter="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

UserControl次に、リソースを適切な場所 ( 、WindowAppまたはその他のオブジェクト)に追加する必要があります。

<UserControl.Resources> 
 <converter:ScreenHeightConverter x:key="screenHeightConverter"/>
</UserControl.Resources>

最後に、キー属性値で静的リソースを参照できます。"screenHeightConverter"この場合。

その後、バインディングで静的リソース参照を使用できます

<VariableSizedWrapGrid Margin="3" ItemHeight="{Binding '80',Converter={StaticResource screenHeightConverter}}" ItemWidth="255"/>
于 2013-01-02T13:25:40.970 に答える