6

Tôi gặp sự cố với số TabControl, số TextBox và xác thực ToolTip.Chú giải công cụ xác thực còn lại trên TabControl

Hãy tưởng tượng có một TabControl với hai TabItems. Trên mục đầu tiên có một đơn giản TextBox. Điều này TextBoxText thuộc tính được liên kết với thuộc tính chuỗi của UserControl chính nó với Mode=TwoWayValidatesOnExceptions=True. Các setter của tài sản Text ném một ngoại lệ bất cứ khi nào một cái gì đó được thiết lập.

Phần Resources của UserControl chứa một phong cách mặc định mới cho TextBox và xác nhận ToolTip (những kiểu dáng và mẫu tuy nhiên được lấy từ MSDN).

Bây giờ nhập nội dung vào các TextBox và để xác nhận ToolTip xuất hiện:

enter image description here

Sau đó chuyển sang tab thứ hai. Các ToolTip xác nhận vẫn là:

enter image description here

tôi đã đưa ra một giải pháp VS chứa một ứng dụng Silverlight đó chứng tỏ vấn đề này. Lưu trữ zip giải pháp VS có sẵn here.

Có ai có vấn đề tương tự hoặc thậm chí là giải pháp cho vấn đề đó không?

Tuyên bố từ chối trách nhiệm: Có câu hỏi tương tự here on StackOverflow liên quan đến Silverlight 4 chưa được trả lời kể từ khoảng một năm rưỡi. Tôi đã đăng câu hỏi đó trên silverlight.net nhưng không nhận được trả lời trong vài ngày.

Trả lời

3

Tôi nghĩ rằng đây là một lỗi của TabControl -implementation. Tôi đã triển khai hành vi này để khắc phục điều này trong ứng dụng của chúng tôi:

public class TabControlFixBehavior: Behavior<TabControl> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged; 
     base.OnAttached(); 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged; 

     base.OnDetaching(); 
    } 

    private void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs args) 
    { 
     if (args.RemovedItems.Count > 0) 
     { 
      var oldTabItem = args.RemovedItems[0] as TabItem; 
      if (oldTabItem != null) 
      { 
       var popups = VisualTreeHelper.GetOpenPopups(); 
       foreach (var popup in popups) 
       { 
        var toolTip = popup.Child as ToolTip; 
        if (toolTip != null) 
        { 
         if (VisualTreeHelper.GetRoot(toolTip.PlacementTarget) == oldTabItem.Content) 
         { 
          popup.IsOpen = false; 
         } 
        } 
       } 
      } 
     } 
    } 
} 
0

chú giải công cụ xác thực là một tính năng tiềm ẩn trong Silverlight 5. Vui lòng xóa nút "UserControl.Resources" trong bảng điều khiển người dùng "trang chính" của bạn và bạn sẽ có hành vi mong đợi.

[EDIT] Tôi đã không đọc hết câu hỏi của bạn, xin lỗi :)

+0

Cảm ơn bạn đã trả lời, xóa tài nguyên thực sự giải quyết được vấn đề, nhưng không phải là một tùy chọn trong trường hợp của tôi vì tôi cần các kiểu điều khiển này. Tôi chỉ đưa kiểu mặc định từ MSDN vào ví dụ của mình để chứng minh rằng vấn đề này không phải do kiểu của tôi gây ra. – Spontifixus

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