| Autor |
Nachricht |
Parker
Unregistrierter
|
Parker Unregistrierter
15:38:55 24.07.2012 Titel: |
|
Zitieren |
Ok. Dann halt nochmals konkret gefragt.
Zuerstmal ich würde mal sagen in Davids Lösung sind noch Copy&Paste Fehler.
So wärs richtig:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <Style TargetType="{x:Type Local:CommandBarView}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Local:CommandBarView}">
<!-- Entweder ein Panel zb StackPanel mit "IsItemsHost" oder den ItemsPresenter -->
<ItemsPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Local:CommandButtonItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Local:CommandButtonItem}">
<Button>
<ContentPresenter />
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> | |
Meine konkrette Frage:
Wie binde ich denn nun meine Property IsActivated an IsEnabled
Wenn ich das wie folgt mache
| Code: | ...
<Button IsEnabled="{Binding IsActivated}" >
<ContentPresenter />
</Button>
... | |
und IsActivated auf False setzte ist der Button immer noch aktiv. |
|
|
|
 |
EXDW
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.08.2005
Beiträge: 4732
|
EXDW Mitglied
16:55:13 24.07.2012 Titel: |
|
Zitieren |
Hajo, passiert, war hier im Forum getippt ^^
Wie du schon gemerkt hast ist es ein Custom Control, kein UserControl.
Wenn du das IsEnabled per Binding setzt, dann sucht das Control im DataContext des Containers (CommandButtonItem ist der Container wo gebundene Items im DataContext liegen, wenn du es direkt erstellst, ist DataContext leer).
Du musst also im Container ein Property IsActivated machen und das auf den inneren Button durch reichen.
| C#: | 1 2 3 4 5 6 7 8 9 10 11 | <Style TargetType="{x:Type Local:CommandButtonItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Local:CommandButtonItem}">
<Button IsEnabled="{TemplateBinding IsActivated}">
<ContentPresenter />
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> | |
| C#: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class CommandButtonItem : ContentControl
{
static CommandButtonItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CommandButtonItem), new FrameworkPropertyMetadata(typeof(CommandButtonItem)));
}
public bool IsActivated
{
get { return (bool)GetValue(IsActivatedProperty); }
set { SetValue(IsActivatedProperty, value); }
}
public static readonly DependencyProperty IsActivatedProperty =
DependencyProperty.Register("IsActivated", typeof(bool), typeof(ownerclass), new UIPropertyMetadata(0));
} | |
(propdp ist das Snippet)
Sobald du das hast kannst du es einfach setzen und es geht auf den Inneren Button durch.
Das selbe müsstest du auch noch mit Command, CommandParameter usw machen.
| C#: | <Views:CommandBarView>
<Views:CommandButtonItem Content="1" IsActivated="False" />
<Views:CommandButtonItem Content="2" />
<Views:CommandButtonItem Content="3" />
<Views:CommandButtonItem Content="4" />
</Views:CommandBarView> | |
PS. du kannst auch einfach IsEnabled benutzen, hat das ContentControl schon und "erbt" sich auch nach unten durch, aber ich gehe davon aus das es nur ein Beispiel ist. |
|
|
|
 |
Parker
Unregistrierter
|
Parker Unregistrierter
08:03:18 25.07.2012 Titel: |
|
Zitieren |
Danke!
Hatte das Property IsActivated zwar in der Klasse drin aber halt nicht als Dependency Property. Und das TemplateBinding hatte ich auch nicht. |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|