2012-02-28 22 views
7

Tôi có một lớp bắt nguồn từ thanh trượt sử dụng mẫu điều khiển tùy chỉnh và có thêm một vài thuộc tính phụ thuộc. Tôi muốn kích hoạt các trình kích hoạt trong khuôn mẫu dựa trên các thuộc tính mới.Cách sử dụng thuộc tính tùy chỉnh trong trình kích hoạt ControlTemplate

Ví dụ, tôi có một thuộc tính phụ thuộc mới được gọi là ThumbIsVisible mà khi được đặt thành false Tôi chỉ muốn phần ngón tay cái của thanh trượt của tôi là hiddin. mẫu kiểm soát của tôi trông giống như:

<Slider.Template> 
<ControlTemplate TargetType="{x:Type Slider}"> 
... 
<Track.Thumb> 
<Thumb x:Name="m_Thumb" Style="{StaticResource SliderThumbStyle}" /> 
... 

Tôi muốn thêm vào một kích hoạt mà trông giống như:

<ControlTempate.Trigger> 
<Trigger Property="ThumbIsVisible" Value="False"> 
<Setter TargetName="m_Thumb" Property="Visibility" Value="Collapsed" /> 

Ngay lập tức tôi có thể thấy điều này sẽ không làm việc như tôi có của tempate kiểm soát loại mục tiêu được đặt thành Thanh trượt. Tuy nhiên, nếu tôi thay đổi điều đó để nói:

<ControlTemplate TargetType="{x:Type local:myCustomSlider}"> 

thì tôi gặp sự cố với loại mẫu khác với điều khiển. Cách duy nhất xung quanh việc này là tạo xaml bằng cách sử dụng local: myCustomSlider làm kiểu thay vì Slider. Tuy nhiên, làm điều này gây ra rất nhiều vấn đề với thiết kế và mã của VisualStudio.

Có ai biết nếu có một cách tiêu chuẩn để vượt qua tất cả những điều này? Để giải quyết vấn đề này, tôi đã thử thêm vào trình kích hoạt của mẫu thông qua mã-đằng sau nhưng không thể làm việc đó.

+2

Thêm giải pháp làm câu trả lời và chấp nhận giải pháp để điều này không nằm xung quanh như chưa được trả lời. – kevev22

+0

Tôi sẽ ngay sau khi tôi nhận được 100 danh tiếng hoặc giới hạn tự trả lời mới của người mới 8 giờ của tôi đã hết. – BruceLH

Trả lời

2

Dường như có cách đơn giản hơn để giải quyết vấn đề này.

<ControlTemplate.Triggers> 
    <DataTrigger Property=local:CustomSlider.ThumbIsVisible" Value="False">  
    <Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" /> 
    </DataTrigger> 
</ControlTemplate.Triggers> 

trong đó địa phương là không gian tên của lớp CustomSlider.

+0

'DataTrigger' không chứa thuộc tính' Property' trong .NET 4. Nó hoạt động như thế nào cho bạn? – Nayan

+0

@Nayan: Hơi muộn một chút, nhưng tôi đoán điều này được cho là 'Trigger' không phải 'DataTrigger'. – dotNET

2

Tất nhiên chỉ mất 30 phút sau khi đăng câu hỏi của tôi để tìm câu trả lời khi tôi dành hai ngày để tìm câu trả lời đầu tiên. Ồ, giải pháp là sử dụng DataTriggers.

<ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=ThumbIsVisible}" Value="False"> 
    <Setter TargetName="m_Thumb" Property="Visibility" Value="Hidden" /> 
    </DataTrigger> 
</ControlTemplate.Triggers> 

Điều quan trọng là sử dụng RelativeSource = {RelativeSource Self} để tìm thuộc tính tùy chỉnh. Sau đó nó hoạt động chính xác như mong đợi.

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