2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

閑話WPF之二三(WPF中的ControlTemplate [1])

 joojo 2007-10-16

通過前面的介紹,我們已經(jīng)知道WPF支持用Style Setters修改控件的屬性值,以改變控件的外觀。我們知道,WPF的任何控件都有視覺樹和邏輯樹。但是Style有它自己的局限性:它只能修改控件已有樹型結(jié)構(gòu)的屬性,不能修改控件的樹型層次結(jié)構(gòu)本身。而在實際運用中,我們常常需要對控件進行更高級的自定義。此時,可以需要使用ControlTemplate才能實現(xiàn)。

在WPF中,ControlTemplate用來定義控件的外觀。我們可以為控件定義新的ControlTemplate來實現(xiàn)控件結(jié)構(gòu)和外觀的修改。同樣,我們先看一個例子:

<Style TargetType="Button">
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="{TemplateBinding Background}"/>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

從例子代碼我們可以看出,ControlTemplate含有模板的語義。也就是說它影響的應該是多個控件。而這個功能恰好可以利用Style實現(xiàn)。所以,在理解了Style之后,這樣的代碼應該不會感到陌生。首先把OverridesDefaultStyle設置為True,表示這個控件不使用當前Themes的任何屬性。然后用Setters修改控件的Template屬性。我們定義了一個新的ControlTemplate來設置新的值。

同樣地,ControlTemplate也使用TargetType屬性,其意義與Style的TargetType一樣。它的x:Key屬性也是如此。然后,由一個Grid來表示控件的視覺內(nèi)容。其中的TemplateBinding與Binding類似,表示當前Ellipse的顯示顏色與Button的Background屬性保持同步。TemplateBinding可以理解為Binding在模板中的特例。而另一個ContentPresenter與WPF的基本控件類型有關,一種是ContentControl,一個是ItemControl。在上面的例子中定義的是基于ContentControl的Button。所以使用ContentPresenter來表示內(nèi)容的顯示。

WPF中每個預定義的控件都有一個默認的模板,因此,在我們學習自定義模板(也就是自定義控件)之前,可以先熟悉了解WPF的默認模板。為了便于查看模板的樹形結(jié)構(gòu)層次,我們可以將模板輸出為XML文件格式,這樣能有助于理解。

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = new string(‘ ‘, 4);
settings.NewLineOnAttributes = true;
StringBuilder strbuild = new StringBuilder();
XmlWriter xmlwrite = XmlWriter.Create(strbuild, settings);
XamlWriter.Save(ctrl.Template, xmlwrite);

這里的ctrl是一個實例化的Control類。并且Control需要已經(jīng)顯示在屏幕上,否則Control.Template可能為NULL。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多