2

たとえば、以下に示すようなことをしたいのですが、コードビハインドで行います。XAMLを使用した例はたくさんありますが、C#で同じことを行うには何もありません。だから私の推測は違います。ありがとう。

ここに画像の説明を入力してください

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <TextBlock TextWrapping="Wrap" Width="455">
        <Span FontSize="20">2</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">1/2</Span>

        <Span FontSize="20"> + </Span>

        <Span FontSize="20">3</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">3/4</Span>

        <Span FontSize="20"> = </Span>

        <Span FontSize="20">6</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">1/4</Span>
    </TextBlock>
</StackPanel>

4

4 に答える 4

2

はい、このXAML出力はC#コードでも実行できます

擬似コード

StackPanelオブジェクトを作成します

TextBlockオブジェクトを作成します。TextWrappingプロパティをWrapに設定し、 Widthを455に設定します。

Spanの複数のオブジェクトを作成します。必要に応じて、FontSizeおよびその他のプロパティ(text、BaseAllighnemt)を設定します。

スパンオブジェクトをTextblock.Inlinesプロパティに追加します

スタックパネルにテキストブロックを追加

それでおしまい

于 2012-08-03T16:11:09.020 に答える
1

XAMLコードが解析され、マークアップに対応するオブジェクトが作成されるため、オブジェクトを直接作成することで、いつでも同じことができます。

したがって、Spanオブジェクトを作成して適切なプロパティを設定し、それらを子としてTextBlockオブジェクトに追加するだけです。

于 2012-08-03T16:11:06.327 に答える
1

実際、Xamlで実行できるほとんどすべてのことは、C#でも実行できます。*.g.csビルド時にXamlがC#に変換されるため(ファイルを探す)。ほとんどの場合、Xamlで指定したものと同じクラスを使用できますが、Xamlが自動的に処理するいくつかの追加機能があります。この場合、次のことができます。

var textblock = new TextBlock();
textblock.Inlines.Add(new Run("2") {FontSize = 20});
textblock.Inlines.Add(new Run("1/2") {FontSize = 14, BaselineAlignment = BaselineAlignment.TextTop});
于 2012-08-03T16:11:21.050 に答える
1

あなたが投稿した XAML については、信じてください。XAML ははるかに読みやすく、コンパクトです。コードでこれを行うには、 と をインスタンス化し、WindowStackPanelに追加しStackPanelWindowそのWindowタイトル、高さ、幅のプロパティなどを指定する必要があります。それを行うために、すでに約 6 行を見ています。のインスタンス化TextBlockと の設定を開始すると、さらに醜くなりますSpan

XAML なしで WPF を使用することは絶対にできますが、なぜそうしたいのかはよくわかりません。それを行う WPF プログラムの例は、ここにあります。実際、あなたの質問の逆が当てはまります。XAML でできることはすべて C# でもできますが、C# でできることはすべて XAML でできるわけではありません。これは、XAML マップが共通ランタイム言語のクラス、プロパティ、イベントなどを直接実行するためですが、すべてのクラスと XAML コードの一部との間にマッピングが存在しないためです。

簡単に言えば、XAML は、純粋なコードよりもはるかに保守しやすく、編集が容易であり、作業には単純なツール (XML エディター) が必要なため、純粋なコードを使用するよりも適しています。

于 2012-08-03T16:15:15.490 に答える