61

これは WPF の認識にとっては簡単なことかもしれませんが、WPF ProgressBar にテキストを配置する簡単な方法があるかどうか知りたいです。私には、空のプログレス バーはむき出しに見えます。これは、進行中のメッセージを表示したり、表現に数字を追加したりすることができる画面領域です。現在、WPF はすべてコンテナーと拡張機能に関するものであり、ゆっくりとそのことに気付きつつありますが、「テキスト」または「コンテンツ」プロパティが表示されないため、何かを追加する必要があると考えています。私の進行状況バーであるコンテナに。元の WinForms 衝動よりも自然なテクニックが 1 つまたは 2 つあるでしょうか? そのプログレスバーにテキストを追加するための最良の、最も WPF に自然な方法は何ですか?

4

7 に答える 7

68

前の応答 ( newCustomControlまたは an の作成Adorner) はどちらもより良い方法ですが、手早く簡単に (またはその方法を視覚的に理解したい) 場合は、次のコードが機能します。

<Grid Width="300" Height="50">  
   <ProgressBar Value="50" />
   <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
      My Text
   </TextBlock>
</Grid>

z-index は、リストされている最後の項目が一番上になるようになっていることに注意してください。

また、Kaxamlをまだ持っていない場合は、必ず入手してください。何かを理解しようとしているときに XAML をいじるのに最適です。

于 2008-09-19T03:19:52.573 に答える
30

テキストを追加するための再利用可能なメソッドが必要な場合は、テキストを表示するための追加のTextBlockを持つ新しいStyle/ControlTemplateを作成できます。TextSearch.Text添付プロパティを乗っ取って、進行状況バーにテキストを設定できます。

再利用可能である必要がない場合は、プログレスバーをグリッドに配置し、グリッドにTextBlockを追加するだけです。WPFは要素を一緒に構成できるため、これはうまく機能します。

必要に応じて、ProgressBarとTextBlockをパブリックプロパティとして公開するUserControlを作成できるため、カスタムControlTemplateを作成するよりも作業が少なくて済みます。

于 2008-09-16T19:23:33.297 に答える
6

Adorner を使用して、その上にテキストを表示できます。

Adorners に関する MSDN の記事を参照してください。

Adorner クラスから継承するクラスを作成します。OnRender メソッドをオーバーライドして、必要なテキストを描画します。必要に応じて、表示するテキストを含むカスタム Adorner の依存関係プロパティを作成できます。次に、言及したリンクの例を使用して、この Adorner を進行状況バーの adorner レイヤーに追加します。

于 2008-09-16T19:30:56.773 に答える
1

を右クリックProgressBarし、[テンプレートの編集] > [コピーの編集] をクリックします。

次に、VS によって生成されたスタイルTextBlockの終了タグのすぐ上に、次のように配置します。Grid

   <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
   <TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/>
 </Grid>
 <ControlTemplate.Triggers>
于 2016-01-29T09:46:32.947 に答える
1

これは、与えられた回答に基づいています。私は MahApps Metro を使用しているので、最終的には次のようになりました。

<Grid>
    <metro:MetroProgressBar x:Name="pbar" Value="50" Height="20"></metro:MetroProgressBar>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ElementName=pbar, Path=Value, StringFormat={}{0:0}%}"></TextBlock>
</Grid>

通常のバーを Metro スタイルで使用する場合:

<Grid>
    <ProgressBar x:Name="pbar" Value="50" Height="20" Style="{StaticResource MetroProgressBar}"></ProgressBar>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ElementName=pbar, Path=Value, StringFormat={}{0:0}%}"></TextBlock>
</Grid>

スタイルなしで同じ:

<Grid>
    <ProgressBar x:Name="pbar" Value="60" Height="20" Style="{x:Null}"></ProgressBar>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ElementName=pbar, Path=Value, StringFormat={}{0:0}%}"></TextBlock>
</Grid>

何が起こっている?

プログレスバーがあり、その上にテキストを配置するだけです。したがって、プログレスバーをそのまま使用するだけです。プログレスバーをグリッドに配置し、その中にテキストブロックを配置します。次に、必要に応じてテキストを送信したり、プログレスバーの値である現在のパーセンテージを取得したりできます。

于 2019-11-21T09:56:21.307 に答える