WPF의 도구 모음의 제어판에있는 레이블을 업데이트하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/222052

  •  03-07-2019
  •  | 
  •  

문제

도구 모음과 도구 모음으로 구성된 ControlTemplate이 있습니다. 내 툴바에는 여러 버튼이 있고 레이블이 있습니다. "1 of 10"과 같은 툴바에서 레이블을 업데이트 할 수 있기를 원합니다.

나의 첫 번째 생각은 라벨을 프로그래밍 방식으로 찾아 설정하는 것이지만, 나는 이것이 트리거로 수행해야한다는 것을 읽고 있습니다. 나는 이것을 달성하는 방법을 이해하는 데 어려움을 겪고 있습니다. 어떤 아이디어?

   <Style x:Key="DocViewerToolBarStyle" TargetType="{x:Type ContentControl}">
   <Setter Property="Template">
     <Setter.Value>
           <ControlTemplate TargetType="{x:Type ContentControl}">
              <ToolBarTray... />
              <ToolBar.../>
              <Button../>             
              <Button..>

             <Label x:Name="myStatusLabel"  .. />
도움이 되었습니까?

해결책

ControlTemplate의 목적은 컨트롤의 모양을 정의하는 것입니다. 문제의 경우 제어 템플릿이 올바른 솔루션인지 확실하지 않습니다.

Bryan이 지적한 것처럼, 당신은 콘텐츠 당신의 통제에 이미 존재하는 속성에 대한 레이블의 속성. 이것은 완료해야합니다 템플릿 결합.

<Label x:Name="myStatusLabel" Content={TemplateBinding MyStatusLabelProperty} ../>

속성 mystatuslabelproperty 그런 다음 제어 클래스에 존재해야합니다. 일반적으로, 당신은 당신의 자신을 만들 것입니다 Usercontrol 그것은 mystatuslabelproperty라고 불리는 올바른 유형 (객체 또는 문자열)의 종속성 속성을 가지고 있습니다.

다른 팁

나는 당신의 컨트롤의 "내용"속성으로 레이블을 설정할 것입니다.

<Label x:Name="myStatusLabel"  Content="{TemplateBinding Content}"/>

그런 다음 최상위 객체의 컨텐츠 속성으로 레이블의 텍스트를 설정할 수 있습니다.

InotifyPropertyChanged 인터페이스를 구현하는보기 모델을 만들고 DataTemplate을 사용하여 다음과 같은 것을 사용하여 표시합니다.

<DataTemplate DataType={x:Type viewmodel:MyToolBarViewModel}>
    <Label Content={Binding CurrentPage} />
    <Label Content={Binding TotalPages} ContentStringFormat="{}of {0}" />
</DataTemplate>

<ToolBar>
    <ContentPresenter Content={Binding <PathtoViewModel>} />
</ToolBar>

바인딩을 사용하면 레이블의 내용을 명시 적으로 업데이트 할 필요가 없습니다. 뷰 모델에서 속성의 값을 설정하고 적절한 속성 변경 이벤트를 올리면 레이블이 컨텐츠를 업데이트하게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top