2011-04-14 36 views
9

Tôi có một trang WPF. Trang có một số nội dung, nhưng thành phần con cuối cùng của bố cục gốc của trang là điều khiển người dùng mà tôi đã tạo. Nó trông giống như thế này:WPF: Làm cách nào để tham khảo các điều khiển khác trong kích hoạt Thuộc tính tài sản?

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

Theo mặc định, IsOn tài sản của đối tượng UserControlViewModel được thiết lập để false, ví dụ: người dùng điều khiển không nhìn thấy được. Tôi đã thực hiện một số logic thay đổi thuộc tính này thành true và sau đó điều khiển người dùng được hiển thị trước tất cả các thành phần khác bị mờ đi. Điều này hoạt động tốt.

Bây giờ, tôi muốn tạo hoạt ảnh hiệu ứng mờ dần làm mờ các thành phần nằm sau điều khiển người dùng khi nó hiển thị. Tiếp theo, tôi muốn tạo đường viền màu đỏ chứa nội dung mờ dần từ phía bên trái, vì vậy hãy di chuyển + mờ dần.

Hãy bắt đầu với hiệu ứng mờ dần trước. Tôi viết theo phong cách này cho Border đó là nghĩa vụ để làm mờ các thành phần nền:

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

Nhưng có vấn đề: Tôi không thể thiết lập các ràng buộc đối với cò Property, bởi vì nó không phải là một tài sản phụ thuộc. Tôi cần một cách để kích hoạt trình kích hoạt của tôi kích hoạt khi grid có thuộc tính Visibility được đặt thành Visible. Xin hãy giúp tôi và cảm ơn bạn!

Vấn đề thứ hai là, tôi không biết cách di chuyển đường viền màu đỏ, vì vậy tôi cần trợ giúp về một số biến đổi quy mô, tôi đoán ... Cảm ơn một lần nữa!

Trả lời

15

thử thay thế các dòng sau:

gốc:

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

thay thế:

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

Nó hoạt động, tuyệt vời! – Boris

+0

Nó chỉ hoạt động lần đầu tiên! TẠI SAO!? – Boris

+0

@myermian: Tôi không hoàn toàn chắc chắn ý bạn là gì. Bạn có thể giải thích nó bằng một vài câu nữa không? Cảm ơn. – Boris

Các vấn đề liên quan