私は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. どのようにwin32のリストボックスの枠線/枠の幅を増やす
- 2. HTMLの枠線(垂直線)
- 3. ボーダーボトムスタイリング。ナビゲーションバーのメニューと同じ幅の枠線を作成する
- 4. IEでCSSの枠線の幅が2倍になった
- 5. Google Apps Scriptでセルの枠線の幅を設定する
- 6. CSSの枠線の枠線の追加ボックスの影
- 7. xamarin.formsでエディタのプレースホルダと枠線のスタイルを設定する方法
- 8. Scenebuilderの枠線中央領域最大幅画像(ウィンドウ幅)を設定
- 9. geom_map ggplot2の枠線
- 10. GalleryViewのカスタム枠線
- 11. JavaFXの枠線グリッド
- 12. A枠フォントの枠線ですか?
- 13. C#WPF透明な枠線付きの枠線
- 14. CSSの枠線の概要
- 15. CSSの枠線の矛盾
- 16. グリッドセル内のスタックパネルの枠線
- 17. ビューの枠線のテクスチャ
- 18. CSSの円の枠線
- 19. フレームセットの枠線の色
- 20. 各行のUITextViewの枠線
- 21. ImageViewの枠線の色
- 22. ナビゲーションメニューの勾配の枠線
- 23. asp画像ボタン点線の枠線
- 24. 枠線付きのGridPane
- 25. 三角形の枠線
- 26. GridBagLayout複数のボタン+枠線
- 27. 黒いビデオの枠線 - CSS
- 28. HTML/CSS本文の枠線
- 29. Android 3.0「ホログラフィック」テーマの枠線
- 30. 点線の枠を描く
あなたが効果を使用したくない特別な理由はありますか?フレームの境界線の幅を設定する問題は、それらのフレームでは非常に些細なことになります。 – hankide
私は効果のない方法があると思っていましたが、PCLだけでした。そのような方法がない場合は、私は '効果' –