私のXamarin.Formsアプリケーションでは、Xamarinのデフォルトコントロールを置き換えるために、カスタムレンダラーを使用しているため、ボタンの外観をカスタマイズする必要があります。自分のボタンコントロールを持つWindows Phone 8.1の.FormsXamarin.Formsカスタムレンダラー使用時のイベント/コマンドの転送
Buttonを拡張するだけのコントロールは、後で追加のプロパティを追加します。
public class ButtonControl : Button {}
のWindows Phone 8.1のマイカスタムレンダラ:私はのよう
<StackLayout VerticalOptions="Center"
HorizontalOptions="Fill"
Margin="24,12,24,0">
<controls:ButtonControl Text="{res:Translate LoginPageButtonText}"
TextColor="{x:Static const:Colours.OverlayColor}"
BackgroundColor="{x:Static const:Colours.PrimaryColor}"
BorderWidth="0"
Margin="0,24,0,0"
HeightRequest="50"
IsEnabled="{Binding LoginValid}"
Command="{Binding LoginCommand}"
StyleId="{x:Static const:StyleIds.LoginPageButton}"/>
</StackLayout>
:私はXamarin.FormsのXAMLファイル内のコントロールを使用していますか
public class ButtonControlRenderer : ViewRenderer<ButtonControl, Button>
{
protected override void OnElementChanged(ElementChangedEventArgs<ButtonControl> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
return;
var button = new Button
{
Style = Application.Current.Resources["ButtonWithTilt"] as Style,
Content = Element.Text,
IsEnabled = Element.IsEnabled
};
Element.BackgroundColor = Color.Transparent;
SetNativeControl(button);
}
}
をそして、ボタンを置き換えると、私のコマンドは機能しません.OnElementChangedに次のコードを追加すると、新しいボタンがクリックされたときにコマンドが実行されます。
button.Tapped += delegate
{
Element.Command.Execute(null);
};
これは最もクリーンなソリューションのようではありませんが、これを接続するより良い方法はありますか?
また、Clickedのような基本的なXamarin.Formsコントロールでイベントを発生させたい場合はどうすればよいですか? ButtonControlのClickedイベントを、Buttonクラスから継承し、そこからイベントをトリガするメソッドを追加するよりもオーバーライドしますか?
非常にありがたいことに、メソッドを探していましたが、IButtonControllerにキャストしていないので見つからなかったためです。 処分についてのヒント –