2009-03-10 31 views
12

Tôi dường như đang gặp khó khăn trong ngày hôm nay. Tất cả những gì tôi muốn làm là ẩn TextBox ẩn hiển thị dựa trên dữ liệu giá trị bool cho Cửa sổ được lưu trữ trong đó.Cách tạo hộp văn bản Hiển thị = Ẩn với trình kích hoạt

Điều tôi vừa không biên dịch và tôi không hiểu tại sao. Hãy giúp tôi.

<TextBlock Grid.Column="2" Text="This order will be sent to accounting for approval" 
      Foreground="Red" VerticalAlignment="Center" FontWeight="Bold" Padding="5"> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=AllowedToSubmit}" Value="True"> 
        <Setter Property="Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Trả lời

19

Bạn cần phải đặt Style.TargetType để cho nó nhận ra Visibility tài sản:

<TextBlock Grid.Column="2" VerticalAlignment="Center" FontWeight="Bold" Foreground="Red" Padding="5" Text="This order will be sent to accounting for approval"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=AllowedToSubmit}" Value="True"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

đường liên kết của bạn để AllowedToSubmit lẽ cần phải có ElementName thiết lập để tên 's Window, như tốt.

+0

Không nhất thiết - anh ta có thể đã thiết lập một DataContext xa hơn cây và AllowedToSubmit là thuộc tính trên đối tượng đó. – Andy

+0

Đồng ý với Andy. Nếu Russ đang sử dụng MVVM, anh ta có thể có một DataContext để giải quyết ràng buộc. – Adrian

+0

MVVM. Tôi không cần phải đặt ElementName. Cảm ơn các mẹo mặc dù. Năm của tôi về winforms được chứng minh là khá vô giá trị trong WPF. :) – Russ

8

lựa chọn khác là để ràng buộc TextBlock.Visibility trực tiếp đến tài sản:

<Window> 
    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="BoolToVisibility" /> 
    </Window.Resources> 
    <TextBlock Visibility="{Binding Path=AllowedToSubmit, Converter={StaticResource BoolToVisibility}}" /> 
</Window> 

Nếu bạn muốn nó hoạt động như thế nào trong mẫu của bạn, nơi mà sự thật ẩn TextBlock, sau đó bạn có thể viết chuyển đổi của riêng bạn để chuyển đổi ngược lại được xây dựng trong BooleanToVisibilityConverter.

+0

Đây là cách phổ biến nhất để đặt mức hiển thị trong WPF bằng MVVM. +1 –

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