2010-04-01 27 views
9

Chỉ cố gắng hiển thị nhãn khi một mục nhất định trong một kết hợp được chọn. Mã nên giải thích khá nhiều.Khả năng hiển thị WPF của phần tử giao diện người dùng dựa trên lựa chọn kết hợp

<ComboBox Name="comboMyCombo"> 
     <ComboBoxItem>Don't show the label</ComboBoxItem> 
     <ComboBoxItem>Show the label</ComboBoxItem> 
    </ComboBox> 

    <Label Visibility="Collapsed">This is my label 
     <Label.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger 
          Binding="{Binding ElementName=comboMyCombo, Path=SelectedValue}" Value="Show the label"> 
         <Setter Property="Label.Visibility" Value="Visible"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Label.Style> 
    </Label> 

Trả lời

24

Có hai vấn đề ở đây. Đầu tiên, mức hiển thị mặc định sẽ được chỉ định trong kiểu. Nhưng ngay cả với điều đó nó sẽ không hoạt động bởi vì các ràng buộc trên kích hoạt là so sánh một SelectedValue, một đối tượng ComboBoxItem với một đối tượng chuỗi và đó sẽ không bao giờ tương đương. Để giữ cho ví dụ đơn giản, tôi đã đặt các giá trị thích hợp trong thuộc tính Thẻ của ComboBoxItem. Mặc dù việc triển khai thực tế so sánh có thể thay đổi tùy theo nhu cầu cụ thể của ứng dụng.

<ComboBox Name="comboMyCombo"> 
     <ComboBoxItem Tag="Hide">Don't show the label</ComboBoxItem> 
     <ComboBoxItem Tag="Show">Show the label</ComboBoxItem> 
    </ComboBox> 

    <Label>This is my label 
     <Label.Style> 
      <Style> 
       <Setter Property="Label.Visibility" Value="Collapsed"></Setter> 
       <Style.Triggers> 
        <DataTrigger 
         Binding="{Binding ElementName=comboMyCombo, Path=SelectedItem.Tag}" Value="Show"> 
         <Setter Property="Label.Visibility" Value="Visible"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Label.Style> 
    </Label> 
+0

BTW: là có một cách để tái sử dụng kích hoạt này trên nhiều điều khiển mà không lặp lại nó? Tôi có nhiều điều khiển tôi muốn ẩn/dựa trên lựa chọn này. Chúng là các ô lưới riêng biệt nên tôi không thể chỉ ẩn một bảng xếp chồng. – tim

+0

Nếu bạn có ý nghĩa trên nhiều loại điều khiển (Nhãn, Nút, v.v.) tôi sẽ làm điều đó với một hành vi được đính kèm. Nếu bạn có nghĩa là tái sử dụng giữa các trường hợp khác nhau của cùng một loại điều khiển, bạn nên tạo kiểu cho tài nguyên. –

+0

Hành vi được đính kèm. Cảm ơn Scott, bạn thật tuyệt vời. – tim

9

Một giải pháp "sạch" sẽ là

<ComboBox> 
    <ComboBoxItem x:Name="iOne" Content="One"/> 
    <ComboBoxItem x:Name="iTwo" Content="Two"/> 
    <ComboBoxItem x:Name="iThree" Content="Three"/> 
</ComboBox> 

<Label Content="One is shown"> 
<Label.Style> 
    <Style TargetType="Label"> 
     <Setter Property="Visibility" Value="Hidden" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=iOne, Path=IsSelected}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Label.Style> 
</Label> 
+0

Tôi không thể tìm thấy tài sản IsSelected của combobox trong WPF. –

+0

Đó là tài sản trên ComboBoxItem @ShantanuGupta – edvaldig

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