Laden...

[erledigt] Control aktivieren über Trigger

Erstellt von Maliko vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.674 Views
M
Maliko Themenstarter:in
117 Beiträge seit 2012
vor 9 Jahren
[erledigt] Control aktivieren über Trigger

Hoi,

ich hab da mal ne Frage an euch. Und zwar habe ich gemerkt, das es Probleme gibt, wenn man versucht ein Steuerelement mit einem Trigger zu aktivieren, wenn dieses per Default auf Disabled gesetzt wurde.

Umgekehrt gibt es da aber kein Problem. Ich meine Folgendes:

Funktioniert:


<DatePicker SelectedDate="{Binding ElementName=StandartPitBis, Path=SelectedDate}">
    <DatePicker.Style>
        <Style TargetType="DatePicker">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsChecked}" Value="False">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DatePicker.Style>
</DatePicker>

Funktioniert nicht:


<DatePicker SelectedDate="{Binding ElementName=StandartPitBis, Path=SelectedDate}" IsEnabled="False">
    <DatePicker.Style>
        <Style TargetType="DatePicker">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsChecked}" Value="True">
                    <Setter Property="IsEnabled" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DatePicker.Style>
</DatePicker>

Hat vielleicht jemand eine Idee woran das liegen könnte? Das Databinding funktioniert bei beiden Varianten einwandfrei. Der Trigger wird ausgelöst wenn eine bestimmte Checkbox gecheckt wird (IsEnabled ist allerdings ein Property des Datenobjektes, welches von der Checkbox gesetzt wird, da sich die Checkbox in einer GridView befindet).

L
155 Beiträge seit 2012
vor 9 Jahren

Wenn du die IsEnabled Eigenschaft als Objekt Eigenschaft direkt im DataPicker angibst, kann diese nicht mehr vom Style überschrieben werden. Immer wenn du etwas Default + Style angeben willst, sollte das im Style auch definiert werden.

<DatePicker SelectedDate="{Binding ElementName=StandartPitBis, Path=SelectedDate}">
    <DatePicker.Style>
        <Style TargetType="DatePicker">
           <Setter Property="IsEnabled" Value="true"
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsChecked}" Value="False">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DatePicker.Style>
</DatePicker>

Mit freundlichen Grüßen
lutzeslife

M
Maliko Themenstarter:in
117 Beiträge seit 2012
vor 9 Jahren

Sowas in der Art habe ich schon vermutet gehabt, konnte nur leider nix entsprechendes finden. Stand in meinem WPF-Buch leider auch nicht drin. Danke dir für die Info.

5.299 Beiträge seit 2008
vor 9 Jahren

kein gutes Buch.

Aber warum einen Trigger?


    <DatePicker SelectedDate="{Binding ElementName=StandartPitBis, Path=SelectedDate}">
      <DatePicker.Style>
        <Style TargetType="DatePicker">
          <Setter Property="IsEnabled" Value="{Binding IsChecked}"/>
        </Style>
      </DatePicker.Style>
    </DatePicker>

Warum überhaupt einen Style?


    <DatePicker SelectedDate="{Binding ElementName=StandartPitBis, Path=SelectedDate}" IsEnabled="{Binding IsChecked}"/>

Ok - dein Binding ist invertiert - da müssteste dir einen BoolInverterConverter schreiben, falls das noch nicht gibt.

Der frühe Apfel fängt den Wurm.

M
Maliko Themenstarter:in
117 Beiträge seit 2012
vor 9 Jahren

Weil ich euch nur einen Auszug gezeigt habe. Das ist nicht der einzige Trigger. Darum Trigger und darum Style.