独自のカスタムボタンスタイルを実装したいと思います。スタイルは、ボタンが自分の状態を変更するたびに変更する必要があります(有効化から無効化など)。Xamarin.Forms動的ボタンスタイリング
私の現在の解決策は、Androidでスタイルを定義することです。私のカスタムButtonRendererは、このスタイルをボタンに適用します。
Button_Style.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#d7d7d7" />
<stroke
android:width="1dp"
android:color="#d7d7d7" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_enabled="false">
<shape>
<solid
android:color="#efefef" />
<stroke
android:width="1dp"
android:color="#efefef" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#d7d7d7"
android:endColor="#d7d7d7"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#d7d7d7" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
カスタムレンダラ:
using FrameworkForms.UserControl;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Color = Android.Graphics.Color;
[assembly: ExportRenderer(typeof(CustomButton), typeof(FrameworkForms.Droid.Renderer.CustomizedButtonRenderer))]
namespace FrameworkForms.Droid.Renderer
{
public class CustomizedButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.SetBackgroundResource(Resource.Drawable.button_style);
Control.SetAllCaps(false);
if (!Control.Enabled)
{
Control.SetTextColor(Color.ParseColor("#858585"));
}
}
}
}
}
有効になって私のボタンに結合プロパティがあります。問題はかなり明らかです。プロパティが変更されると、ボタンは再度レンダリングされず、以前の状態のテキストカラーが保持されます。
私はXamarin.Formsのスタイルについて少し研究しました。それはダイナミックなスタイリングが私のためにやってくれるはずだが、私はすべてのボタン(グローバルスタイルのようなもの)にしたいと思っている。私は何とかそれらを組み合わせることはできますか?それとももっと良い解決策ですか?言及したいと思いますが、私はiOSのすべてを再び実装することは気にしません。とにかく違うことになるでしょう。だから、Android xml-Stylesもそうするでしょう。
ありがとうございました。
これは問題ではありません。バインディングが正しく機能し、ボタンの背景が設定されます。 – greenhoorn
これは問題です。私は例として 'SetTextColor'を使いました。ポイントはまだ同じです。 'IsEnabled'プロパティが変更されると、ここで起動されます。バックグラウンドリソースを変更する必要がある場合は、ここでも変更できます。私は私の答えをより明確にするために編集します... – SuavePirate
また、答えは直接これに反応します: "問題はかなり明白です。プロパティが変更されると、ボタンは再度レンダリングされず、前のstate .... "....これは' IsEnabled'プロパティを変更するときにテキストの色を変更します。それは全体のポイントです。 – SuavePirate