วิธีกำหนดเป้าหมายการควบคุมทั้งหมด (สไตล์ WPF)


92

ฉันสามารถระบุสไตล์ที่ใช้กับองค์ประกอบทั้งหมดได้หรือไม่ ฉันเหนื่อย

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

แต่มันไม่ทำอะไรเลย

คำตอบ:


122

Styleคุณสร้างขึ้นเป็นเพียงการกำหนดเป้าหมายและไม่ได้องค์ประกอบที่เป็นผลมาจากControl Controlเมื่อคุณไม่ได้ตั้งค่าx:Keyมันจะถูกตั้งค่าโดยปริยายTargetTypeดังนั้นในกรณีของคุณx:Key="{x:Type Control}"ดังนั้นในกรณีของคุณ

ไม่มีวิธีใดโดยตรงในการระบุStyleเป้าหมายที่กำหนดเป้าหมายองค์ประกอบทั้งหมดที่มาจากTargetTypeไฟล์Style. คุณมีทางเลือกอื่น ๆ

หากคุณมีสิ่งต่อไปนี้ Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

คุณสามารถกำหนดเป้าหมายทั้งหมดได้Buttonsเช่น

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

หรือใช้สไตล์โดยตรงกับองค์ประกอบใด ๆ เช่น Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

ฉันสงสัยว่าทำไมสไตล์ของฉันกับประเภทเป้าหมายถึงFrameworkElementไม่ถูกนำไปใช้กับการควบคุมทั้งหมดของฉัน - สิ่งนี้ตอบคำถามนั้นได้!
qJake

5
มันเส็งเคร็งจริงๆหรือเปล่าที่ฉันต้องระบุสไตล์สำหรับการควบคุมทุกประเภทที่วางไว้บนหน้าต่างไม่ใช่เฉพาะสำหรับสิ่งที่รูททั่วไปสำหรับทุกคน ???
Ondřej

7

ดังที่ Fredrik Hedblad ตอบคุณสามารถส่งผลต่อองค์ประกอบทั้งหมดที่สืบทอดมาจากการควบคุม

แต่คุณไม่สามารถใช้สไตล์สำหรับบล็อกข้อความและปุ่มที่มีลักษณะเดียวกันได้เช่น

การทำเช่นนั้น:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.