WPFのツールバーのControlTemplateにあるラベルを更新するにはどうすればよいですか?

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

  •  03-07-2019
  •  | 
  •  

質問

ToolBarTrayとToolBarで構成されるControlTemplateがあります。私のツールバーには、いくつかのボタンとラベルがあります。ツールバーのラベルを「1 of 10」のように更新できるようにしたい

最初に考えたのは、プログラムでラベルを見つけて設定することですが、これはTriggersで行うべきだと読んでいます。私はこれを達成する方法を理解するのに苦労しています。アイデアはありますか?

   <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の Content プロパティを、コントロールに既に存在するプロパティにバインドする必要があります。これは、 TemplateBinding を介して行う必要があります。

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

プロパティ MyStatusLabelProperty は、コントロールクラスに存在する必要があります。 通常、MyStatusLabelPropertyという名前の正しいタイプ(オブジェクトまたは文字列)の依存関係プロパティを持つ独自の UserControl を作成します。

他のヒント

ラベルを&quot; Content&quot;に設定しますコントロールの属性(例:

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

次に、トップレベルオブジェクトの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>

バインディングを使用すると、ラベルのコンテンツを明示的に更新する必要はありません。必要なことは、ビューモデルでプロパティの値を設定し、適切なPropertyChangedイベントを発生させるだけです。これにより、ラベルのコンテンツが更新されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top