it-swarm-ko.tech

WPF에서 ProgressBar의 텍스트

이것은 WPF cognoscenti에게는 쉬운 일이 아니지만 WPF ProgressBar에 텍스트를 넣는 간단한 방법이 있는지 알고 싶습니다. 나에게 빈 진행률 표시 줄이 알몸으로 보입니다. 그것은 what 진행 중이거나 메시지에 숫자를 추가 할 수있는 화면 공간입니다. 이제 WPF는 컨테이너와 확장에 관한 것입니다. 천천히 주위를 감싸고 있지만 "Text"또는 "Content"속성이 표시되지 않으므로 무언가를 추가해야한다고 생각합니다. 내 진행률 표시 줄 컨테이너에. 내 원래 WinForms 임펄스보다 자연스러운 기술이나 두 가지가 있습니까? 진행률 표시 줄에 텍스트를 추가하는 가장 좋은 WPF 방식은 무엇입니까?

51
Jacob Proffitt

텍스트를 추가하기 위해 재사용 가능한 방법이 필요한 경우 텍스트를 표시 할 추가 TextBlock이있는 새 스타일/ControlTemplate을 만들 수 있습니다. TextSearch.Text attached 속성을 하이재킹하여 진행률 표시 줄에 텍스트를 설정할 수 있습니다.

재사용 할 필요가 없다면, 진행률 표시 줄을 그리드에 놓고 TextBlock을 그리드에 추가하십시오. WPF는 요소를 함께 구성 할 수 있으므로 제대로 작동합니다.

원하는 경우 ProgressBar 및 TextBlock을 공용 속성으로 표시하는 UserControl을 만들 수 있으므로 사용자 지정 ControlTemplate을 만드는 것보다 작업이 적습니다.

29
Abe Heidebrecht

이전의 응답 (새로운 CustomControl 또는 Adorner 작성)은 모두 더 나은 방법이지만, 빠르고 더러운 (또는 시각적으로 이해하는 방법)을 원한다면이 코드는 작업:

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

Z- 색인은 마지막으로 나열된 항목이 맨 위에 오도록합니다.

또한 Kaxaml 이없는 경우 선택해야합니다. 상황을 파악하려고 할 때 XAML을 사용하는 것이 좋습니다.

59
SmartyP

이것은 아주 간단 할 수 있습니다 (이 작업을 수행하는 방법이 많이 없다면).

Style를 사용하여이 작업을 수행하거나 TextBlockProgressBar을 오버레이 할 수 있습니다.

나는 개인적으로 이것을 사용하여 완료를 기다릴 때 진행률을 보여줍니다.

매우 간단하게하기 위해 나는 one Binding 만 갖고 싶었으므로 TextBock.TextProgressBar.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>

이것은 다음과 같습니다 :

enter image description here

전체 게시물은 WPF Tutorial 을 확인하십시오.

28
Felix D.

Adorner를 사용하여 그 위에 텍스트를 표시 할 수 있습니다.

광고주에 대한 MSDN 기사 참조

Adorner 클래스에서 상속되는 클래스를 만듭니다. OnRender 메서드를 재정 의하여 원하는 텍스트를 그립니다. 원하는 경우 표시하려는 텍스트가 포함 된 사용자 정의 Adorner의 종속성 특성을 작성할 수 있습니다. 그런 다음 내가 언급 한 링크의 예제를 사용하여이 Adorner를 진행률 표시 줄의 adorner 레이어에 추가하십시오.

5
Bob Wintemberg

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>

결과 :

enter image description here


동일하지만 % 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>

enter image description here

1
Andrew

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>
1
AnjumSKhan