source

WPF의 진행률 표시줄에 있는 텍스트

ittop 2023. 5. 12. 22:43
반응형

WPF의 진행률 표시줄에 있는 텍스트

이것은 WPF cognoscenti에게는 어렵지 않을 수 있지만, WPF Progress Bar에 텍스트를 넣을 수 있는 간단한 방법이 있는지 알고 싶습니다.제가 보기에 빈 진행 표시줄은 벌거벗은 것처럼 보입니다.그것은 진행 중인 것에 대한 메시지를 전달하거나 심지어 표현에 숫자를 추가할 수 있는 스크린 부동산입니다.WPF는 컨테이너와 확장 기능에 관한 것입니다. 이제 천천히 생각을 정리하고 있습니다. 하지만 "텍스트" 또는 "내용" 속성이 보이지 않기 때문에 진행률 표시줄인 컨테이너에 무언가를 추가해야 할 것 같습니다.원래 WinForms의 충동보다 더 자연스러운 기술이 있습니까?진행 표시줄에 텍스트를 추가하는 가장 좋고 가장 자연스러운 WPF 방법은 무엇입니까?

두 개의 이전 응답(새 항목 생성)CustomControl또는Adorner)가 더 나은 방법이지만, 빠르고 더럽거나 시각적으로 방법을 이해하고 싶다면 이 코드가 작동합니다.

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

z-index는 마지막으로 나열된 항목이 맨 위에 있다는 것을 명심하십시오.

또한, 만약 당신이 아직 Kaxaml을 가지고 있지 않다면, 그것을 꼭 집어라 - 그것은 당신이 무언가를 알아내려고 할 때 XAML을 가지고 노는 것에 매우 좋습니다.

이 작업은 매우 간단할 수 있습니다(이 작업을 수행하는 방법이 많지 않은 경우).

사용할 수 있습니다.Style이 일을 끝내거나 그냥 덮어씌우는 것.TextBlock그리고 aProgressBar.

저는 개인적으로 이것을 사용하여 완료를 기다릴 때 진행률을 표시합니다.

매우 단순하게 유지하기 위해 저는 하나만 갖고 싶었습니다. 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 튜토리얼을 확인하십시오.

텍스트를 추가하기 위해 재사용 가능한 방법이 필요한 경우 텍스트를 표시하는 추가 텍스트 블록이 있는 새 스타일/제어 템플릿을 작성할 수 있습니다.텍스트 검색을 가로챌 수 있습니다.진행률 표시줄에 텍스트를 설정하는 텍스트 첨부 속성입니다.

재사용할 필요가 없는 경우 진행 표시줄을 그리드에 넣고 텍스트 블록을 그리드에 추가하기만 하면 됩니다.WPF는 요소를 함께 구성할 수 있기 때문에 잘 작동할 것입니다.

원하는 경우 ProgressBar 및 TextBlock을 공개 속성으로 표시하는 UserControl을 생성할 수 있으므로 사용자 정의 ControlTemplate를 생성하는 것보다 작업량이 적습니다.

관리자를 사용하여 관리자 위에 텍스트를 표시할 수 있습니다.

장식품에 대한 MSDN 문서 참조

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

2개의 특성(값/최대값)에서 텍스트 및 바인딩이 있는 진행률 표시줄:

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

재처리:

여기에 이미지 설명 입력


동일하지만 진행률(%):

<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템플릿 편집 > 복사본 편집을 클릭합니다.

다음에 그에다음그를 .TextBlock의 마 막 꼬 리 바 표 바 같 와 이 된 시 에 위 지 로 표 ▁of 이같 ▁tag ▁the ▁just ▁as ▁above ▁shown ▁below ▁closing 의 와 바 된 마GridVS가 생성한 스타일로.

   <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
   <TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/>
 </Grid>
 <ControlTemplate.Triggers>

이는 주어진 답변을 기반으로 합니다.저는 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 Style과 함께 일반 막대를 사용하려는 경우:

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

무슨 일이 일어나고 있습니까?

진행 표시줄이 있고 그 위에 텍스트를 배치하기만 하면 됩니다.진행 표시줄을 원하는 대로 사용합니다.진행 표시줄을 그리드에 넣고 텍스트 블록을 배치합니다.그런 다음 원하는 대로 텍스트를 입력하거나 진행률 표시줄에서 값인 현재 백분율을 가져올 수 있습니다.

언급URL : https://stackoverflow.com/questions/75924/text-on-a-progressbar-in-wpf

반응형