C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: C#+WPF, 矩形内部への文字出力


(過去ログ 165 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■95412 / inTopicNo.1)  C#+WPF, 矩形内部への文字出力
  
□投稿者/ S.Kos (8回)-(2020/07/29(Wed) 14:58:47)

分類:[.NET 全般] 

こんにちは、みなさま

Graphics.DrawStringを用いて、矩形の内部に内部に文字を書き出していました。
およそ、下記の如くです。

StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;

Rectangle rect = new Rectangle(xPos, yPos, xLen, yLen );

e.Graphics.DrawString( "なんちゃら限定",
new System.Drawing.Font("MS 明朝", fSize, FontStyle.Bold),
Brushes.Black,
rect,
sf );

Pen myPen = new Pen(Color.FromArgb(0 , 0 , 0) , 1);
e.Graphics.DrawRectangle(myPen, rect);

これをWPFで書き直そうとして躓きました。
文字の出力も、矩形の出力も、なんとかなったのですが、矩形の中に文字、で行き詰まっています。
なんとかなるモノでしょうか?
引用返信 編集キー/
■95413 / inTopicNo.2)  Re[1]: C#+WPF, 矩形内部への文字出力
□投稿者/ ぶなっぷ (235回)-(2020/07/29(Wed) 15:29:10)
いまいち、やりたいことが理解できていませんが、
以下のようなやつのことでしょうか?
  http://www.wisdomsoft.jp/430.html

e.Graphics みたいな感じで、
WPF の UIElement (Window/TextBlock/...らのベースクラス) に描画できます。

引用返信 編集キー/
■95415 / inTopicNo.3)  Re[2]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (9回)-(2020/07/29(Wed) 16:15:08)
No95413 (ぶなっぷ さん) に返信
ご教示ありがとうございます。

> いまいち、やりたいことが理解できていませんが、
>
封筒の表書きに、○○様親展、などと枠付きのスタンプが有ったりしますよね?
同じようなコトを求めています。
・矩形とその内部に記す文字を定義して、
・矩形の位置のみを指定して印字
したい、と考えています。

> 以下のようなやつのことでしょうか?
> http://www.wisdomsoft.jp/430.html
>
このサイト、コード6の"drawingContext.DrawText(text, pt);"か゜ソレかも・・・です。
じっくり眺めてみましょう。


引用返信 編集キー/
■95416 / inTopicNo.4)  Re[3]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (10回)-(2020/07/29(Wed) 20:16:26)
No95413 (ぶなっぷ さん) に返信
ご教示ありがとうございます。
> http://www.wisdomsoft.jp/430.html
>
このサイト、コード6の"drawingContext.DrawText(text, pt);"は、詰まるところ、テキストの描画ですよね?

テキストを、矩形の中に書き込む、ことにはならないように思います。

引用返信 編集キー/
■95417 / inTopicNo.5)  Re[4]: C#+WPF, 矩形内部への文字出力
□投稿者/ Hongliang (1069回)-(2020/07/29(Wed) 20:58:53)
今どうやっているかというところにもよるのですが。

以前の投稿のやり取りでやっていたようにCanvasに描画要素を乗せていっているのであれば、ChildにTextBlockを入れたBorderを使えばいいかもしれません。
枠線はBorderのBorderBrushおよびBorderThicknessで設定できます。
BorderのWidth/Heightを指定しなければ、Borderはテキストが必要とするだけの大きさになります。
TextBlockのMarginでBorderとTextBlockの境界を調整できます。
引用返信 編集キー/
■95418 / inTopicNo.6)  Re[5]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (11回)-(2020/07/30(Thu) 08:46:19)
No95417 (Hongliang さん) に返信
ご教示、ありがとうございます。
古〜〜いプログマーにとって、オブジェクト指向ってのは、どーにも・・・です。笑ってやってください。

いろいろと探りまた試してみたのですが、
>ChildにTextBlockを入れたBorder
>
が掴めていません。
いま少しの情報なりヒントなり、重ねてご教示いただければ幸いです。

引用返信 編集キー/
■95419 / inTopicNo.7)  Re[6]: C#+WPF, 矩形内部への文字出力
□投稿者/ Hongliang (1070回)-(2020/07/30(Thu) 08:57:52)
var border = new Border();
var textBlock = new TextBlock();
border.Child = textBlock;
というだけです。
引用返信 編集キー/
■95420 / inTopicNo.8)  Re[7]: C#+WPF, 矩形内部への文字出力
□投稿者/ ぶなっぷ (236回)-(2020/07/30(Thu) 09:29:41)
Hongliangさんもおっしゃっている通り、
今どうやっているかというところにもよります。

「テキストを、矩形の中に書き込む」を言葉通りに受け取るなら、

以下の内容でも要求を満たすように思います。
 ※ パラメータが多いので...にて省略
namespace Test
{
  public class TestGrid : Grid
  {
      protected override void OnRender(DrawingContext drawingContext)
      {
          base.OnRender(drawingContext);
          drawingContext.DrawRectangle(
              Brushes.Blue, new Pen(Brushes.Black, 1.0), new Rect(...));
          drawingContext.DrawText(new FormattedText(...), new Point(...));
      }
  }
}
XAMLには以下のようにして貼り付けます(必要な部分のみ抜粋)。
  xmlns:test="clr-namespace:Test"
  <test:TestGrid  Width="150" Height="60" />

また、XAMLだけでやるなら、以下のようにしても要求を満たすように思います。
    <Grid Width="150" Height="60">
        <Rectangle Fill="Blue" Stroke="Black" />
        <Label Foreground="White"
               HorizontalContentAlignment="Center"
               VerticalContentAlignment="Center"
               Content="RectangleStr" />
    </Grid>

引用返信 編集キー/
■95421 / inTopicNo.9)  Re[7]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (12回)-(2020/07/30(Thu) 09:33:28)
No95419 (Hongliang さん) に返信
重ねてのご教示、誠にありがとうございます。

確かに分ってみれば、というだけのこと、ですね!

やってみました・・・で、borderに色を付けよう・・・また躓きました。

BorderBrushに、ネットから様々な(書式?)の色を示すなんちゃらかんちゃらを付与しても、VSに怒られてばかりです。
枠線の色と太さを決定するには、どーすれば良いですか?

引用返信 編集キー/
■95422 / inTopicNo.10)  Re[8]: C#+WPF, 矩形内部への文字出力
□投稿者/ Hongliang (1071回)-(2020/07/30(Thu) 10:24:01)
> BorderBrushに、ネットから様々な(書式?)の色を示すなんちゃらかんちゃらを付与しても、VSに怒られてばかりです。
> 枠線の色と太さを決定するには、どーすれば良いですか?

https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.border.borderbrush
ここのサンプルコードを見ればよいかと思いますが。

BorderBrushはSystem.Windows.Media.Brush型です。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.brush
Brush型は抽象クラスで、塗りつぶし方によってそれぞれ派生クラスが用意されており、例えば単色で塗りつぶす用にSolidColorBrush型が存在しています。
さらに、単色のBrushについてはBrushesクラスに様々な色のBrushが定義されています。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.brushes
一般的にはこのクラスの静的メンバを使用すればいいでしょう。上述のサンプルコードでもそうしています。
引用返信 編集キー/
■95423 / inTopicNo.11)  Re[8]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (13回)-(2020/07/30(Thu) 10:40:42)
ぶなっぷさん、重ねてのご教示ありがとうございます。
>今どうやっているか
>
まさにこれが問題です。
GDI+ な Graphics.DrawString では"IPAmj明朝"の異字体に対応できないため、この箇所だけをWPFで書き換えよう、としています。
よって(?)XAMLを考えていません。(考える余地が無い・・・)

Hongliangさん、重ね々々のご教示、ありがとうございます。
>https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.border.borderbrush
>
を見て、border.BorderBrush = Brushes.SlateBlue;、とやったら怒られたのでした。

>BorderBrushはSystem.Windows.Media.Brush型です。
>
がヒントになりました。

border.BorderBrush = System.Windows.Media.Brushes.Black;
border.BorderThickness = new Thickness(1, 1, 1, 1);
で、当面の壁は乗り越えられました。

引用返信 編集キー/
■95424 / inTopicNo.12)  Re[9]: C#+WPF, 矩形内部への文字出力
□投稿者/ S.Kos (14回)-(2020/07/30(Thu) 13:24:45)
みなさま、ご教示のほど、ほんとうにありがとうございました。

当面の目的は全て達成できましたので、ここで閉じます。

今後ともよろしくお願いいたします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -