Frage

Ich habe eine Control, die aus einer ToolBarTray und einem ToolBar gemacht wird. In meinem ToolBar, habe ich mehrere Tasten und dann ein Etikett. Ich möchte das Label in meiner Symbolleiste mit etwas aktualisieren können, wie „1 von 10“

Mein erster Gedanke ist programmatisch das Etikett zu finden und legen Sie es, aber ich lese, dass dies mit Trigger getan werden soll. Ich habe eine harte Zeit zu verstehen, wie dies zu erreichen. Irgendwelche Ideen?

   <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"  .. />
War es hilfreich?

Lösung

Der Zweck eines Control ist das Aussehen einer Kontrolle zu definieren. Für Ihr Problem, sie ist, wenn eine Kontrolle Vorlage die richtige Lösung nicht sicher ist.

Wie Bryan weist auch darauf hin, sollten Sie die Content binden Eigenschaft des Labels auf eine Eigenschaft, die bereits in Ihrer Kontrolle. Dies sollte über getan werden Template .

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

Die Eigenschaft MyStatusLabelProperty hat dann bei Ihrer Steuerklasse existieren. Normalerweise würden Sie erstellen Sie Ihre eigenen Usercontrol , die eine Abhängigkeitseigenschaft des richtigen Typs hat (entweder Objekt oder String), die MyStatusLabelProperty gestattet.

Andere Tipps

Ich würde das Etikett des „Inhalt“ Attribut Ihrer Kontrolle beispiel eingestellt.

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

Dann können Sie Ihr Etikett Text mit Ihrem Top-Level-Objekt Content-Attribute gesetzt.

würde ich ein View-Modell erstellen, die INotifyPropertyChanged-Schnittstelle implementiert und verwende Datatemplate, um sie anzuzeigen so etwas wie dies mit:

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

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

Mit Bindungen mit Sie haben nicht explizit Label Inhalt zu aktualisieren. Alles, was Sie tun müssen, ist der Wert der Eigenschaft im Hinblick Modell gesetzt und richtiges Property Ereignis auslösen, die das Etikett bewirkt, dass sein Inhalt aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top