4

私はオンラインで広範囲に調べましたが、私が抱えているこの問題で私を助けるために本当に具体的なものを見つけることができませんでした.

Xamarin フォームで、ボタン コンポーネントのカスタム レンダラーを作成しようとしています。XLabs ImageButton コンポーネントを使用していないのはなぜですか? 私の現在の Android ターゲット バージョンである Android 4.0.3 と互換性がないためです。

私はまた、あなたが本当に私に要求しない限り、投稿するのが非常に恥ずかしがり屋であるほど価値のないいくつかのコードを自分で書いてみました:)

このコードが必要です。このコードがないと、次のようなボタンで画像を使用しようとすると、ボタンに画像が読み込まれないためです。

<Button Image="someImage.png"/>

ここでチュートリアルに従ってみました:

http://blog.falafel.com/learning-xamarin-custom-renderers-in-xamarin-forms/

しかし、私はそれを自分のニーズに合わせることができませんでした。

4

3 に答える 3

4

画像がまったく表示されていませんか?画像の場所を確認してください。iOS のデフォルトの場所は Resources フォルダー、Android では resources/drawable、wp ではルートです。ソリューションごとに 3 つではなく 1 つのイメージが必要な場合は、PCL に入れ、ビルド プロパティを埋め込みリソースに設定し、その名前を名前空間で修飾します。つまり、ProjectName.Assets.image.png の場合PCL Assets ディレクトリにあります。これがあなたの問題かどうかはわかりませんが、念のため、提供することにしました。

于 2015-02-21T23:18:58.813 に答える
4

これは、TapGestureRecognizer を使用して画像をタップ可能にすることで解決できます。実装については、http ://www.c-sharpcorner.com/UploadFile/e04e9a/xamarin-forms-image-button-recipe/ を参照してください。

于 2015-04-21T17:00:58.110 に答える
1

これを行う適切な方法は、Xamarin フォームに関する Charles Petzold の優れた本の第 13 章で説明されています。

この問題に対する私のアプローチは (本とは異なります)、画像ファイル パスにコンバーターを使用することです。Button.Image プロパティは FileImageSource オブジェクトであり、ファイル パスが必要です。残念ながら、PCL 内の埋め込みリソースまたはコンテンツ ファイルは使用できません。iOS、Android、および UWP プロジェクトのそれぞれに個別のイメージ ファイルを追加する必要があります。これを行う方法は、画像を PCL に追加し、リンクを使用することです (既存のファイルの追加ダイアログのオプション)。

したがって、上記の問題に対する私のコンバーターアプローチは次のとおりです

<Button Image="{Binding Converter={StaticResource FileImageSourceConverter}, ConverterParameter=someImage.png}" />

静的リソース...

<ContentPage.Resources>
    <ResourceDictionary>
        <local:FileImageSourceConverter x:Key="FileImageSourceConverter"/>
    </ResourceDictionary>
</ContentPage.Resources>

コンバーターは…

public class FileImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string filename = parameter as string;
        switch(Device.RuntimePlatform)
        {
            case Device.iOS:
            case Device.Android:
            default:
                return filename;
            case Device.Windows:
                return Path.Combine("Images", filename);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

このアプローチの利点は、(1) XAML が OnPlatform 要素で散らかっていないことです。(2) UWP プロジェクトのルート ディレクトリに画像を配置する必要はありません。(3) 一部の人が提案したのと同じ問題を解決するために、カスタム レンダリングを使用するよりもはるかに簡単です。

于 2017-10-05T03:57:52.277 に答える