2011-02-10 9 views
7

Mamy niestandardowe płótno, które ma wyspecjalizowane węzły, które zachowują się podobnie do standardowych aplikacji MDI. Pożądanym zachowaniem jest to, że jeśli dowolna z kontrolek podrzędnych "okna" ma fokus, to "okno" jest uważane za aktywne.Jak mogę ustawić niestandardową formant na podstawie tego, czy któreś z jego elementów podrzędnych ma fokus?

Właściwość IsFocused nie wydaje się kaskadowa, co oznacza, że ​​kontrola podrzędna ma fokus, jej pojemnik nie jest również ustawiony na "skupiony", więc nie możemy tego użyć. Z tego samego powodu nie możemy ustawić właściwości IsFocused na kontenerze, ponieważ uważam, że ukradłoby to dziecko.

Moim jedynym pomysłem jest stworzenie nowego DP o nazwie HasChildWithFocus lub coś podobnego, następnie w kodzie z tyłu, należy nasłuchiwać zdarzeń związanych z bąbelkami i ustawić tę flagę. Nie jestem pewien, czy to najlepszy sposób. (Możemy to zaimplementować jako połączenie przypisanej właściwości/przywiązanego zachowania, coś w tym stylu.)

Ale oczywiście byłoby znacznie lepiej, gdybyśmy mogli po prostu poprosić o kontrolę "Hej ... czy ty lub którekolwiek z twoich dzieci ma skupiać?'

Więc możesz?

+0

+1 do twojego pomysłu zachowania, które nasłuchuje, a które ustawia dołączoną właściwość. To jest sposób, w jaki bym to zrobił, nie mogę wymyślić żadnych innych błyskotliwych pomysłów! – ColinE

+0

Cóż, +1 moje pytanie! Chodź ... pomóż geekowi tutaj! [smirk] (Dzięki za twoją opinię.) Tak ... to był jedyny sposób, jaki mogłem wymyślić.) – MarqueIV

Odpowiedz

8

Można użyć UIElement.IsKeyboardFocusWithin bezpośrednio tak:

<Grid> 
    <Grid.Resources> 
     <Style x:Key="panelStyle" TargetType="Border"> 
      <Setter Property="BorderBrush" Value="PaleGoldenrod"/> 
      <Style.Triggers> 
       <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
        <Setter Property="BorderBrush" Value="PaleGreen"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <UniformGrid Columns="2"> 
     <Border BorderThickness="10" Style="{StaticResource panelStyle}"> 
      <StackPanel> 
       <TextBox Text="TextBox1"/> 
       <TextBox Text="TextBox2"/> 
      </StackPanel> 
     </Border> 
     <Border BorderThickness="10" Style="{StaticResource panelStyle}"> 
      <StackPanel> 
       <TextBox Text="TextBox3"/> 
       <TextBox Text="TextBox4"/> 
      </StackPanel> 
     </Border> 
    </UniformGrid> 
</Grid> 

W tym przykładzie granicznego, który zawiera element z naciskiem klawiatury jest stylizowany z innym pędzlem granicznej.

+0

Idealnie! Właśnie tego chciałem. (Nie wiedziałem o tej właściwości.) Doskonały czas również dlatego, że właśnie zacząłem pisać załączone rzeczy, więc teraz nie muszę! :) – MarqueIV

Powiązane problemy