wpf: วิธีการแสดงคำแนะนำเครื่องมือเมื่อปุ่มถูกปิดใช้งานโดยคำสั่ง?


162

ฉันพยายามที่จะแสดงคำแนะนำเครื่องมือโดยไม่คำนึงถึงสถานะของปุ่ม แต่ดูเหมือนจะไม่หลอกลวง:

<Button Command="{Binding Path=CommandExecuteAction}" 
        ToolTip="{Binding Path=Description}" ToolTipService.ShowOnDisabled="true"
        Style="{StaticResource toolbarButton}">
   <Image Source="{Binding Path=Icon}"></Image>
</Button>

ฉันจะแสดงคำแนะนำเครื่องมือได้อย่างไรเมื่อปุ่มถูกปิดการใช้งานเนื่องจาก command.CanExecute คืนค่าเท็จ?

บันทึก:

ToolTipService.ShowOnDisabled = "true" ใช้งานได้อย่างมีเสน่ห์ เหตุผลที่ใช้งานไม่ได้ในตัวอย่างของฉันเป็นเพราะรูปแบบที่เกี่ยวข้องกับปุ่มกำหนดคำสั่งควบคุมและปิดการทดสอบการกดปุ่มเมื่อปุ่มถูกปิดใช้งาน (IsHitTestVisible = false) การเปิดใช้งานการทดสอบ Hit อีกครั้งใน controltemplate ทำให้คำแนะนำเครื่องมือปรากฏขึ้นเมื่อปุ่มถูกปิดใช้งาน


ซ้ำซ้อนของWPF Tooltip Visibility
OJ

ฉันใช้ ToolTipService.ShowOnDisabled แต่ไม่สามารถใช้งานได้
Marius

1
เพียงลบคำถามนี้ ฉันทำโครงการทดสอบขนาดเล็กและ ToolTipService.ShowOnDisabled ทำงานได้ดี
Marius

15
ฉันดีใจที่คำถามนี้ไม่ได้ถูกลบ มันตอบคำถาม / ปัญหาที่ฉันมีอย่างรวดเร็วและแม่นยำซึ่งเป็นเหตุผลที่แน่นอนที่ฉันมาถึงตั้งแต่แรก ขอบคุณที่เป็น Lazy (tm) Marius :-)
Jere.Jones

ขอโทษฉันมีวิธีที่ฉันสามารถแสดงได้เฉพาะเมื่อปิดการใช้งานหรือไม่?
advapi

คำตอบ:



26

นี่เป็นวิธีที่ดีในการเพิ่มรหัสเริ่มต้นของคุณ

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));

คุณช่วยอธิบายสิ่งนี้ได้ไหม? การบอกว่าเป็นวิธีที่ดีเมื่อเริ่มต้นไม่ได้อธิบาย
ชิงทรัพย์แรบไบ

ช่วยให้มั่นใจได้ว่าสำหรับคลาสใดก็ตามที่สืบทอดจาก Control คำแนะนำเครื่องมือจะแสดงแม้ว่าอินสแตนซ์การควบคุมถูกปิดใช้งานแล้ว
sacha barber

3
เป็นเรื่องน่าขันที่ผู้ใช้มีความต้องการเครื่องมือคำแนะนำมากที่สุดเมื่อปิดการใช้งานการควบคุมตามที่พวกเขาต้องการที่จะรู้ว่าทำไมการควบคุมถูกปิดการใช้งาน นี่เป็นตัวอย่างที่ดีของค่าเริ่มต้นใน WPF ที่ไม่ถูกต้องในเวลาส่วนใหญ่ ดังนั้นมันจึงคุ้มค่าที่จะเปลี่ยน
Contango

2

ทำให้เห็นเคล็ดลับเครื่องมือสำหรับปุ่มและช่องทำเครื่องหมายที่ถูกปิดใช้งานทั้งหมด:

<Window.Resources>
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
    <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
</Window.Resources>

การBasedOn=...ป้องกันไม่ให้คุณหลวมสไตล์อื่น ๆ ที่ใช้กับช่องทำเครื่องหมายหรือปุ่มก่อน หากคุณไม่ใช้สไตล์หรือปุ่มอื่น ๆ คุณสามารถลบBasedOn=..ส่วนต่างๆได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.