2010-05-31 5 views
1

Silverlight 응용 프로그램에서 진행률 표시 줄 사용자 지정을 사용하여 연주했습니다. 내가 도달하고자하는 것은 진도 표시 줄에 현재 상태를 다음 형식으로 표시하는 것입니다 : "값/최대 값". 따라서 사용자는 현재 값이 무엇인지 알 수 있으며 가능한 최대 값은 무엇입니까?바인딩을 통한 사용자 지정 진행률 레이블 레이블

<Style x:Key="ProgressBarStyle" TargetType="ProgressBar"> 
     <Setter Property="Width" Value="97.21" /> 
     <Setter Property="Height" Value="19" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ProgressBar"> 
        <Canvas x:Name="LevelField" Width="99" Height="21"> 
         ... 
        <TextBlock ... DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource DecNumberToStringConverter}}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

나는이 구현하고자하는 방법은, 적절한 문자열로 현재 값 및 최대 가능한 변환 것, 값 변환을하는 것입니다 : 여기 내가 사용하는 진행 표시 줄의 스타일이다. 위와 같이 쓰면 제대로 작동합니다. 그러나 ConverterParameter를 Convertor에 제공해야하지만이를 만드는 방법을 모릅니다. : ConvertParameter = {Binding Maximum}과 같이 작성하면 시작시 오류가 표시되고 TextBlock에는 Text 속성이 없습니다. {RelativeSource Self}로 DataContext를 설정하려고했지만 DataContext 특성을 찾을 수 없다는 오류를 표시하지 않았습니다.

설명 된 진행률 표시 줄 레이블을 올바르게 만드는 방법은 무엇입니까?

답변

0

좋아요, 길을 찾은 것 같습니다. 최고의 솔루션은 아니지만 보편적 인 솔루션이 필요하지 않은 경우 작동합니다. 그래서, 하나 이상의 진행률 막대 스타일을 만든 다음 진행률 막대의 각 유형에 해당 유형을 변환기에 대한 문자열 매개 변수로 지정하십시오.

변환기에서 (이것은 모든 진행 막대에 대해 동일하게 유지됩니다) 매개 변수를 검사하고 상수 막대를 사용하여 해당 도구 모음의 최대 개수를 지정하거나 진행률 막대의 최대 값에 대한 직접 요청을 지정합니다.

비록 보편적 인 해결책을 듣고 싶어합니다.

0

부모에게 TextBox를 바인딩하면 값 변환기가 값과 최대 값에 모두 액세스 할 수 있습니다. {Binding RelativeSource={RelativeSource TemplatedParent}}.

그러면 값 변환기는 개체를 ProgressBar로 캐스팅하고 값을 직접 사용할 수 있습니다.

관련 문제