2011-02-10 11 views
7

Standart bir MDI uygulamasının pencereleri gibi davranan özel düğümleri olan özel bir tuvalimiz var. İstenen davranış, "pencere" nin çocuk kontrollerinden herhangi birinin odağı varsa, o zaman "pencere" nin aktif olduğu söylenir.Çocuklardan herhangi birinin odaklanmasına dayanan özel bir denetimi nasıl stil uygulayabilirim?

Artık IsFocused özelliği kademeli görünmüyor, yani bir çocuk denetimi odağa sahipse, kapsayıcı da 'odaklanmış' olarak ayarlanmadığı için bunu kullanamıyoruz. Aynı nedenden dolayı, IsFocused özelliğini konteynırda tutacağımıza göre, konteynere yerleştiremeyiz.

Tek düşüncem, HasChildWithFocus adlı yeni bir DP oluşturmak ya da bunun gibi bir şey oluşturmak, ardından arka planda kodlanmış olayları dinlemek ve bayrağı ayarlamak. Bunun en iyi yol olduğuna emin değilim. (Biz ekli bir mülkiyet/bağlı davranış olarak bir şey olarak uygulayabiliriz.)

Ama eğer bir kontrol isteyebilirsek tabii ki çok daha iyi olurdu 'Hey ... siz veya çocuğunuzdan herhangi biri var mı? odak?'

Peki ya sen?

+0

+1, köpüren olayı dinleyen ve ekli bir özelliği ayarlayan ekli bir davranış fikriniz. Yapmamın yolu bu, başka parlak fikirleri düşünemiyorum! – ColinE

+0

Peki o zaman +1 sorum! Hadi ... burada bir ineklere yardım et! [smirk] (Geri bildiriminiz için teşekkürler. Evet ... düşünebildiğim tek yol buydu.) – MarqueIV

cevap

8

Böyle doğrudan UIElement.IsKeyboardFocusWithin kullanabilirsiniz: Bu örnekte

<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> 

farklı bir sınır fırça ile tarz olduğunu Klavye odaklı öğesi içeren sınır.

+0

Mükemmel! Tam istediğim şey. (Bu özelliği bilmiyordum.) Ekli nesneleri yazmaya başladığımdan beri mükemmel zamanlama, şimdi de zorunda değilim! :) – MarqueIV

İlgili konular