2011-01-16 7 views
6

Zastanawiasz się, czy to jest możliwe, np. jeśli usuwam obramowanie z TextBox i chcę mieć jego domyślną ramkę, kiedy mysz jest nad nim.Czy można użyć narzędzia ustawiającego, aby przywrócić właściwość do wartości domyślnej?

<Style TargetType="TextBox"> 
     <Setter Property="BorderBrush" Value="{x:Null}"/> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" Value="?????"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

Myślałem, że mogę używać, ale w końcu wydawało się, że to zły pomysł, aby ukryć granicę, ale pytanie pozostaje. (Wiem, że w tym przypadku mógłbym odwrócić Triggera, aby usunąć granicę tylko wtedy, gdy mysz nie znajduje się nad ramką TextBox)

+0

Zdefiniuj wartość domyślną. Masz na myśli domyślną wartość przypisaną do podstawowych metadanych 'DependencyProperty'? –

+0

Podejrzewam, że w kategoriach opisowych: Cokolwiek jest używane, gdybym nigdy nie ustawiał własności. –

+0

"Wiem, że w tym przypadku mogę odwrócić Trigger, aby usunąć granicę tylko wtedy, gdy mysz nie znajduje się nad ramką TextBox" - w jakich przypadkach nie można tego zrobić? –

Odpowiedz

5

To tak naprawdę nie działa. System DependencyProperty działa poprzez uwzględnienie wielu różnych źródeł wartości. I jak widać here, setery stylów i wyzwalacze stylu są uważane za osobne źródła. (Są one ponumerowane odpowiednio 8 i 6 w sekcji "Lista priorytetów ustawienia zależności"). Niezależnie od źródła wartości aktywnych wygrywa najwyższy priorytet.

Źródła danych jednego rodzaju nie mogą usunąć wartości podanej przez inne źródło. Jedynym wyzwalaczem powodującym możliwość zmiany wartości, z której ustawia ją nastawnik, jest to, że wyzwalacze mają wyższy priorytet. Nie ma możliwości wyeliminowania wartości dostarczanej przez źródło o niższym priorytecie.

Sposób na osiągnięcie określonego celu, który tutaj wyraziłeś, polega na odwróceniu sensu wyzwalacza - nie określaj ustawnika stylu i nie włączaj wyzwalacza tylko wtedy, gdy IsMouseOver jest fałszywy. Oczywiście to nie pomoże ci we wszystkich możliwych przypadkach, w których możesz chcieć to zrobić. Ale ponieważ nie ma ogólnego rozwiązania, myślę, że musiałbyś rozwiązać każdy konkretny problem na swój własny sposób.

+0

Dobrze wiedzieć o tych precedensach, dziękuję za odpowiedź. –

Powiązane problemy