이것은 WPF cognoscenti에게는 쉬운 일이 아니지만 WPF ProgressBar에 텍스트를 넣는 간단한 방법이 있는지 알고 싶습니다. 나에게 빈 진행률 표시 줄이 알몸으로 보입니다. 그것은 what 진행 중이거나 메시지에 숫자를 추가 할 수있는 화면 공간입니다. 이제 WPF는 컨테이너와 확장에 관한 것입니다. 천천히 주위를 감싸고 있지만 "Text"또는 "Content"속성이 표시되지 않으므로 무언가를 추가해야한다고 생각합니다. 내 진행률 표시 줄 컨테이너에. 내 원래 WinForms 임펄스보다 자연스러운 기술이나 두 가지가 있습니까? 진행률 표시 줄에 텍스트를 추가하는 가장 좋은 WPF 방식은 무엇입니까?
텍스트를 추가하기 위해 재사용 가능한 방법이 필요한 경우 텍스트를 표시 할 추가 TextBlock이있는 새 스타일/ControlTemplate을 만들 수 있습니다. TextSearch.Text attached 속성을 하이재킹하여 진행률 표시 줄에 텍스트를 설정할 수 있습니다.
재사용 할 필요가 없다면, 진행률 표시 줄을 그리드에 놓고 TextBlock을 그리드에 추가하십시오. WPF는 요소를 함께 구성 할 수 있으므로 제대로 작동합니다.
원하는 경우 ProgressBar 및 TextBlock을 공용 속성으로 표시하는 UserControl을 만들 수 있으므로 사용자 지정 ControlTemplate을 만드는 것보다 작업이 적습니다.
이전의 응답 (새로운 CustomControl
또는 Adorner
작성)은 모두 더 나은 방법이지만, 빠르고 더러운 (또는 시각적으로 이해하는 방법)을 원한다면이 코드는 작업:
<Grid Width="300" Height="50">
<ProgressBar Value="50" />
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
My Text
</TextBlock>
</Grid>
Z- 색인은 마지막으로 나열된 항목이 맨 위에 오도록합니다.
또한 Kaxaml 이없는 경우 선택해야합니다. 상황을 파악하려고 할 때 XAML을 사용하는 것이 좋습니다.
이것은 아주 간단 할 수 있습니다 (이 작업을 수행하는 방법이 많이 없다면).
Style
를 사용하여이 작업을 수행하거나 TextBlock
및 ProgressBar
을 오버레이 할 수 있습니다.
나는 개인적으로 이것을 사용하여 완료를 기다릴 때 진행률을 보여줍니다.
매우 간단하게하기 위해 나는 one
Binding
만 갖고 싶었으므로TextBock.Text
로ProgressBar.Value
.
그런 다음 코드를 복사하여 완료하십시오.
<Grid>
<ProgressBar Minimum="0"
Maximum="100"
Value="{Binding InsertBindingHere}"
Name="pbStatus" />
<TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
이것은 다음과 같습니다 :
전체 게시물은 WPF Tutorial 을 확인하십시오.
Adorner를 사용하여 그 위에 텍스트를 표시 할 수 있습니다.
Adorner 클래스에서 상속되는 클래스를 만듭니다. OnRender 메서드를 재정 의하여 원하는 텍스트를 그립니다. 원하는 경우 표시하려는 텍스트가 포함 된 사용자 정의 Adorner의 종속성 특성을 작성할 수 있습니다. 그런 다음 내가 언급 한 링크의 예제를 사용하여이 Adorner를 진행률 표시 줄의 adorner 레이어에 추가하십시오.
2 개의 속성에서 텍스트 및 바인딩이있는 ProgressBar (Value/Maximum value) :
<Grid>
<ProgressBar Name="pbUsrLvl"
Minimum="1"
Maximum="99"
Value="59"
Margin="5"
Height="24" Foreground="#FF62FF7F"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.Text>
<MultiBinding StringFormat="{}UserLvl:{0}/{1}">
<Binding Path="Value" ElementName="pbUsrLvl" />
<Binding Path="Maximum" ElementName="pbUsrLvl" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
결과 :
동일하지만 % of progress :
<Grid>
<ProgressBar Name="pbLifePassed"
Minimum="0"
Value="59"
Maximum="100"
Margin="5" Height="24" Foreground="#FF62FF7F"/>
<TextBlock Text="{Binding ElementName=pbLifePassed, Path=Value, StringFormat={}{0:0}%}"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
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>