私はXamarin.Forms
を使用しています。私はImage
です。私はCorner Radius
とBorder Width
とボーダーしたいです。それはできますか? Frame
を使用しようとしています。良いですが、それはBorder Width
= 1しかなく、これを変更することはできません。私はEffect
について知っているが、私はそれらを使いたくない。私はそれを行うことはできますか?Xamarin.Formsの枠線の幅
2
A
答えて
2
エフェクトを使用して独自の実装を作成することも、FreshEssentialsオープンソースライブラリを拡張することもできます。それらにはAdvancedFrameというコントロールがあり、これはすべてのプラットフォームでFrameコントロール用のカスタムレンダラーを提供します。
各プラットフォーム固有のプロジェクトを見ると、丸い角のサポートのためのベジェパスを作成するクラスAdvancedFrameRenderer
に気付くでしょう。各プラットフォームのDraw
メソッド(iOS、Android)に飛び込むだけで、ストロークの幅を設定する方法がわかります。
ストロークの幅が既にコード内に定義されているため、Androidから開始するのが最も簡単です(on this line)。 AdvancedFrameコントロールのプロパティを作成して、各コントロールに異なる幅を持たせるだけです。私は、どのようにiOS上でストロークの幅を設定するのかはわかりませんが、UIBezierPathを使用しています。
1
あなたはこのような何かを試すことができます。
<Frame HasShadow="False" CornerRadius="25" Padding="2" BackgroundColor="#F69927">
<Frame HasShadow="False" CornerRadius="23" BackgroundColor="White" Padding="12">
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Start">
<!-- Content -->
</StackLayout>
</Frame>
</Frame>
0
私は、Android用FrameRendererで踊ってみましたし、私はいくつかの解決策を見つけました。 MyFrameRendererクラス内で境界線の色、幅、角の半径の変数を表示すると、MyFrame:Frameクラスを作成して自分のフレームタイプのみに影響を与えなければなりませんでした。私の目的のために十分に近い...だから:
namespace PROJECT
{
public class MyFrame : Xamarin.Forms.Frame
{
public static float myFrameWidth = 2;
public static float myCornerRadius = 12;
public static Color myFrameColor = Color.Red;
public static Color myBackgroundColor = Color.Black;
public MyFrame() { }
}
}
...
[assembly: ExportRenderer(typeof(PROJECT.MyFrame), typeof(PROJECT.Droid.MyFrameRenderer))]
namespace PROJECT.Droid
{
class MyFrameRenderer : FrameRenderer
{
protected override void OnDraw(Android.Graphics.Canvas canvas)
{
// canvas contains image of standard outline
// to "hide" it, not efficent but sometimes "close enough solution"
// is to overlay that outline by new one in our's page background color
// then draw a new one in prefered style
// or... just draw thicker one over the old
var my1stPaint = new Android.Graphics.Paint();
var my2ndPaint = new Android.Graphics.Paint();
var backgroundPaint = new Android.Graphics.Paint();
my1stPaint.AntiAlias = true;
my1stPaint.SetStyle(Paint.Style.Stroke);
my1stPaint.StrokeWidth = MyFrame.myFrameWidth + 2;
my1stPaint.Color = MyFrame.myFrameColor.ToAndroid();
my2ndPaint.AntiAlias = true;
my2ndPaint.SetStyle(Paint.Style.Stroke);
my2ndPaint.StrokeWidth = MyFrame.myFrameWidth;
my2ndPaint.Color = MyFrame.myBackgroundColor.ToAndroid();
backgroundPaint.SetStyle(Paint.Style.Stroke);
backgroundPaint.StrokeWidth = 4;
backgroundPaint.Color = MyFrame.myBackgroundColor.ToAndroid();
Rect oldBounds = new Rect();
canvas.GetClipBounds(oldBounds);
RectF oldOutlineBounds = new RectF();
oldOutlineBounds.Set(oldBounds);
RectF myOutlineBounds = new RectF();
myOutlineBounds.Set(oldBounds);
myOutlineBounds.Top += (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Bottom -= (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Left += (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Right -= (int)my2ndPaint.StrokeWidth+3;
canvas.DrawRoundRect(oldOutlineBounds, 10, 10, backgroundPaint); //to "hide" old outline
canvas.DrawRoundRect(myOutlineBounds, MyFrame.myCornerRadius, MyFrame.myCornerRadius, my1stPaint);
canvas.DrawRoundRect(myOutlineBounds, MyFrame.myCornerRadius, MyFrame.myCornerRadius, my2ndPaint);
base.OnDraw(canvas);
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Frame> e)
{
base.OnElementChanged(e);
}
}
}
関連する問題
- 1. IEでCSSの枠線の幅が2倍になった
- 2. JavaFXの枠線グリッド
- 3. GalleryViewのカスタム枠線
- 4. geom_map ggplot2の枠線
- 5. C#WPF透明な枠線付きの枠線
- 6. ImageViewの枠線の色
- 7. グリッドセル内のスタックパネルの枠線
- 8. ビューの枠線のテクスチャ
- 9. CSSの円の枠線
- 10. 各行のUITextViewの枠線
- 11. CSSの枠線の概要
- 12. フレームセットの枠線の色
- 13. ナビゲーションメニューの勾配の枠線
- 14. asp画像ボタン点線の枠線
- 15. Android 3.0「ホログラフィック」テーマの枠線
- 16. GridBagLayout複数のボタン+枠線
- 17. 点線の枠を描く
- 18. 三角形の枠線
- 19. BufferedImage重複枠線
- 20. winformsでテキストボックスの枠線の色と幅を変更する方法?
- 21. CSSの枠線のアウトラインの使用
- 22. JavaFX FXMLの新しい枠線枠にパラメータを渡す
- 23. 塗りつぶし枠と枠線なしのマクロ
- 24. ブートストラップでフォーカス枠の枠線を外す選択
- 25. BlackBerry ListFieldの枠線の描画
- 26. UILabelでの枠線の描画
- 27. HTML 5、CSSの枠線の不一致
- 28. CSS三角形のカスタム枠線の色
- 29. HBITMAPからの枠線の削除
- 30. ハイライトセルの枠線の色他人
あなたが効果を使用したくない特別な理由はありますか?フレームの境界線の幅を設定する問題は、それらのフレームでは非常に些細なことになります。 – hankide
私は効果のない方法があると思っていましたが、PCLだけでした。そのような方法がない場合は、私は '効果' –