• <menu id="w2i4a"></menu>
  • logo Devexpress WPF控件文檔中心

    類型化樣式


    立即下載DevExpress WPF

    類型化樣式允許您用簡化的方式定義元素樣式。

    從v.17.2開始,Devexpress WPF訂閱提供了DevExpress.Xpf.TypedStyles 程序集,其中包含以下控件的類型化樣式:

    • 用于WPF基礎(chǔ)程序集(WindowsBase, PresentationCore, PresentationFramework)中的控件。
    • DevExpress WPF控件。

    類型化樣式與常規(guī)樣式

    下圖展示了常規(guī)樣式和打字樣式的區(qū)別。

    wpf 樣式區(qū)別

    要為多個(gè)按鈕設(shè)置常規(guī)樣式,您應(yīng)該使用TargetType=Button實(shí)現(xiàn)style,并在單獨(dú)的Setter中指定每個(gè)屬性。

    typed style允許用以下方式為所有按鈕定義樣式:

    創(chuàng)建一個(gè)名為{ElementName}Style的新資源,其中{ElementName}是目標(biāo)類型。

    • 例如:ButtonStyle用于標(biāo)準(zhǔn)的Button控件,GridControlStyle用于DevExpress的GridControl。
    • 直接定義不帶設(shè)置符的屬性值,定義 typed style‘s x:Name屬性。
    • 將 typed style指定為與常規(guī)樣式相同的控件。

    支持的功能

    類型化樣式支持所有常規(guī)樣式特性。

    附加屬性

    附加屬性在MergedStyles屬性中收集:

    XAML:

    <BorderStyle x:Key="styleWithAttachedProperties">
    <KeyboardNavigationStyle IsTabStop="False" />
    <FocusManagerStyle IsFocusScope="False" />
    <TextBlockStyle FontSize="13" FontWeight="Bold"/>
    </BorderStyle>
    事件

    您可以指定沒有EventSetters的事件處理程序:

    <BorderStyle x:Key="styleWithEvents" Loaded="BorderStyle_Loaded"/>
    標(biāo)記擴(kuò)展

    立即返回值的標(biāo)記擴(kuò)展(除了BindingBase和DynamicResoureExtension)可以在類型化樣式中用常規(guī)方式使用:

    <SolidColorBrush x:Key="greenBrush">Green</SolidColorBrush>
    <ButtonStyle x:Key="styleWithMarkupExtensions" BorderBrush="{StaticResource greenBrush}" Foreground="{x:Null}" />

    為BindingBase和DynamicResourceExtension標(biāo)記擴(kuò)展使用“*_Source”屬性:

    <ButtonStyle x:Key="styleWithExpressionExtensions" Content_Source="{Binding FirstName}" Tag_Source="{DynamicResource tag}" />

    點(diǎn)擊復(fù)制

    DevExpress擴(kuò)展 (DXBinding/DXEvent/DXCommand)

    DXBinding/DXCommand與類型化樣式無縫配合。

    <ButtonStyle x:Key="styleWithDXBinding"
    Content_Source="{DXBinding 'FirstName + @Self.Tag + $Button.TemplateProperty.Name'}"
    Tag="tag"
    Command_Source="{DXCommand 'Click()'}"/>

    提示:DXEvent不能用于類型化樣式。

    基本樣式

    您可以用下面的方式定義基本樣式:

    <ButtonBaseStyle x:Key="baseStyle" Background="Red" />
    <ButtonStyle x:Key="styleWithBaseStyle" BasedOn="{StaticResource baseStyle}" ClickMode="Hover"/>
    設(shè)置器

    您可以通過填充*Style.Setters集合來使用常規(guī)設(shè)置器。

    <ButtonStyle x:Key="styleWithStandardSetters">
    <ButtonStyle.Setters>
    <Setter Property="DockPanel.Dock" Value="Bottom" />
    </ButtonStyle.Setters>
    </ButtonStyle>
    隱式風(fēng)格

    要定義隱式樣式,使用x:Key代替TargetType:

    <ToggleButtonStyle x:Key="{x:Type ToggleButton}" Width="153" />

    目標(biāo)類型在內(nèi)部設(shè)置為類型化樣式,因此不應(yīng)該手動(dòng)設(shè)置。例如,要為ListBox定義VirtualizingPanelStyle,您需要首先定義ListBoxStyle。

    <ListBoxStyle x:Key="virtualizingStyle">
    <VirtualizingPanelStyle IsVirtualizing="True" />
    </ListBoxStyle>
    觸發(fā)器

    除了類型化的樣式,DevExpress.Xpf.TypedStyles程序集還包含每個(gè)支持的控件的類型化觸發(fā)器:

    <ButtonStyle x:Key="styleWithTriggers" Margin="1,2,3,4">
    <ButtonStyle.Triggers>
    <ButtonTrigger Visibility="Hidden" IsMouseOver="True">
    <TextBlockStyle FontSize="13" />
    </ButtonTrigger>
    </ButtonStyle.Triggers>
    </ButtonStyle>

    您可以在模板中使用類型化觸發(fā)器。要做到這一點(diǎn),指定類型觸發(fā)器的SourceName或TemplateName屬性:

    <ControlTemplate x:Key="templateWithTriggers" TargetType="Button">
    <TextBlock x:Name="textBlock" />
    <ControlTemplate.Triggers>
    <TextBlockTrigger FontWeight="Black" SourceName="textBlock">
    <TextBlockStyle TargetName="textBlock" FontStyle="Oblique"/>
    </TextBlockTrigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>

    如果您為多個(gè)源對象創(chuàng)建觸發(fā)器,則可以定義多個(gè)觸發(fā)器:

    <ControlTemplate x:Key="templateWithDifferentSourceNamesTriggers" TargetType="Button">
    <StackPanel>
    <TextBlock x:Name="textBlock1" />
    <TextBlock x:Name="textBlock2" />
    </StackPanel>
    <ControlTemplate.Triggers>
    <ButtonTrigger>
    <ButtonTrigger.Triggers>
    <MultiTriggerCollection>
    <TextBlockTrigger IsMouseOver="True" SourceName="textBlock1"/>
    <TextBlockTrigger IsKeyboardFocusWithin="True" SourceName="textBlock2"/>
    </MultiTriggerCollection>
    </ButtonTrigger.Triggers>
    <TextBlockStyle FontWeight="Bold"/>
    </ButtonTrigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    數(shù)據(jù)觸發(fā)

    使用TypedDataTrigger將類型樣式與數(shù)據(jù)觸發(fā)器一起使用。

    <ButtonStyle x:Key="styleWithDataTriggers" Margin="1,2,3,4">
    <ButtonStyle.Triggers>
    <TypedDataTrigger Binding="{Binding FirstName}" Value="Jon">
    <TextBlockStyle FontSize="13" />
    </TypedDataTrigger>
    </ButtonStyle.Triggers>
    </ButtonStyle>

    在代碼中使用

    引用和名稱空間

    所有類型樣式和觸發(fā)器都在{Corresponding control namespace}.TypedStyles中實(shí)現(xiàn)。

    示例:ButtonStyle - System.Windows.Controls.TypedStyles

    typed styles的XAML名稱空間與相應(yīng)控件的名稱空間相同,您不需要添加任何額外的名稱空間引用。要使用 typed styles,請?jiān)陧?xiàng)目中引用DevExpress.Xpf.TypedStyles程序集。

    限制

    Visual Studio和Blend不支持類型化樣式,在編輯XAML時(shí)使用類型化樣式。

    不能將類型化樣式應(yīng)用于泛型類型元素或其后代(例如,應(yīng)用于DXTabControl或Wizard類),將此元素使用常規(guī)樣式作為TargetType。

    表演

    類型化樣式的性能與常規(guī)樣式相當(dāng)。

    以下常規(guī)樣式在測試機(jī)上應(yīng)用200ms:

    <Style x:Key="style00" TargetType="Button">
    <Setter Property="FontFamily" Value="CourierNew"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="Focusable" Value="False"/>
    <Setter Property="Content" Value="test"/>
    <Setter Property="Background" Value="Red"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Margin" Value="1,2,3,4"/>
    <Setter Property="Cursor" Value="Hand"/>
    </Style>

    下面通過類型化樣式實(shí)現(xiàn)的模擬在測試機(jī)上應(yīng)用了130毫秒:

    <ButtonStyle x:Key="style00"
    FontFamily="CourierNew"
    FontSize="12"
    FocusVisualStyle="{x:Null}"
    Focusable="False"
    Content="test"
    Background="Red"
    BorderThickness="1"
    Margin="1,2,3,4"
    Cursor="Hand"
    />
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();