2011-04-14 14 views
9

Bir WPF sayfam var. Sayfada bazı içerik var, ancak sayfanın kök düzeninin son alt bileşeni, oluşturduğum bir kullanıcı denetimi. Bu şuna benzer: Varsayılan olarakWPF: Tetikleyici Property özelliği içindeki diğer denetimlere nasıl başvurulur?

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4" /> 
    <!-- The following border is red and holds the content --> 
    <Border 
     Width="{Binding ElementName=txt, Path=ActualWidth}" 
     Height="{Binding ElementName=txt, Path=ActualHeight}" 
     Margin="{Binding ElementName=txt, Path=Margin}" 
     HorizontalAlignment="{Binding ElementName=txt, Path=HorizontalAlignment}" 
     VerticalAlignment="{Binding ElementName=txt, Path=VerticalAlignment}" 
     Background="Red"> 
     <TextBlock 
      Name="txt" 
      Width="200" 
      Height="100" 
      Margin="20" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Text="This is my super awesome message!" /> 
    </Border> 
    </Grid> 
</UserControl> 

, UserControlViewModel nesnenin IsOn özelliği, false ayarlı yani kullanıcı denetimi görünür değildir. Bu özelliği true olarak değiştiren bir mantık uyguladık ve sonra kullanıcı denetimi soluk olan tüm diğer bileşenlerin önünde görüntülenir. Bu iyi çalışıyor.

Şimdi, görünür hale geldikten sonra kullanıcı denetiminin arkasındaki bileşenleri azaltan bir soluk efekti animasyonu oluşturmak istiyorum. Ardından, sol taraftaki içeriğin soluklaşmasını engelleyen kırmızı kenarlığı yapmak istiyorum.

Önce solma efektiyle başlayalım.

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4"> 
     <!-- The following style is new code --> 
     <Border.Style> 
     <Style TargetType="Border"> 
      <Style.Triggers> 
      <Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 
       <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetProperty="Opacity" 
         From="0.0" 
         To="0.4" 
         Duration="0:0:1" /> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
     </Border.Style> 
    </Border> 
    ... 

Ama problem var: Ben arka plan bileşenlerinin karartma yapmak gerekiyordu ki Border bu tarz yazdım bir bağımlılık özelliği olmadığı için ben, tetiği Property bağlayıcı belirleyemezsiniz. grid, Visible'a ayarlandığında Visibility özelliğine sahip olduğunda tetikleyicimin tetiklenmesini söylemenin bir yoluna ihtiyacım var. Lütfen yardım edin ve teşekkür ederim!

İkinci problem, kırmızı sınırın nasıl hareket edildiğini bilmiyorum, bu yüzden bazı ölçek dönüşümleri konusunda yardıma ihtiyacım var, sanırım ... Bir kez daha teşekkürler!

cevap

15

deneyin aşağıdaki satırı değiştirerek: Orijinal

:

<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 

Değiştirme: Çalışır

<DataTrigger Binding={Binding Visibility, ElementName=grid} Value="Visibile"> 
+0

, harika! – Boris

+0

Sadece ilk kez çalışıyor! NİYE YA!? – Boris

+0

@myermian: Ne demek istediğinden emin değilim. Birkaç cümlede açıklar mısınız lütfen? Teşekkürler. – Boris

İlgili konular