1

ToolBarTray と ToolBar で構成される 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"  .. />
4

3 に答える 3

1

コントロールの「コンテンツ」属性にラベルを設定します。

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

次に、最上位オブジェクトの Content 属性を使用して、ラベルのテキストを設定できます。

于 2008-10-21T14:33:07.217 に答える
1

ControlTemplate の目的は、コントロールの外観を定義することです。あなたの問題について、コントロール テンプレートが正しい解決策であるかどうかはわかりません。

Bryan も指摘しているように、Label のContentプロパティを、コントロールに既に存在するプロパティにバインドする必要があります。これはTemplateBindingを介して行う必要があります。

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

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

于 2008-10-21T14:41:15.797 に答える
0

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 イベントを発生させて、ラベルの内容を更新するだけです。

于 2008-10-29T19:13:06.533 に答える