欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
閑話(huà)WPF之二五(WPF中的ControlTemplate [3])

 

在實(shí)際應用中,ControlTemplate是一個(gè)非常重要的功能。它幫助我們快速實(shí)現很Cool的自定義控件。下面我以Windows Vista SDK中的例子ControlTemplateExamples為基礎,簡(jiǎn)單地分析ControlTemplate的使用。這個(gè)例子工程非常豐富,幾乎包含了所有的標準控件。所以,在實(shí)現自定義控件時(shí),可以先參考這樣進(jìn)行適當的學(xué)習研究。

首先是App.xaml文件,這里它把Application.StartupUri屬性設置為Window1.xaml。然后把工程目錄Resource下所有的控件xaml文件都合成為了應用程序范圍內的資源。

<Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Resources\Shared.xaml" />
        <!-- 這里省略 -->
        <ResourceDictionary Source="Resources\NavigationWindow.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

這樣的用法很有借鑒意義。在WPF中實(shí)現Skin框架也隨之變得非常簡(jiǎn)單。值需要動(dòng)態(tài)使用不同的XAML文件即可。然后是Window1.xaml文件。它里面幾乎把所有的控件都顯示了一遍。沒(méi)有什么多說(shuō)的。重點(diǎn)看Resource目錄下的自定義控件文件。這里的控件太多,不可能每個(gè)都說(shuō)說(shuō)。我只挑選其中的Button.xaml為例:

<ResourceDictionary
  xmlns="  xmlns:x="

  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Shared.xaml"/>
  </ResourceDictionary.MergedDictionaries>

  <!-- Focus Visual -->

  <Style x:Key="ButtonFocusVisual">
    <Setter Property="Control.Template">
      <Setter.Value>
        <ControlTemplate>
          <Border>
            <Rectangle Margin="5" StrokeThickness="3"
            Stroke="#60000000" StrokeDashArray="4 2"/>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  <!--...............-->
</ResourceDictionary>

因為這個(gè)XAML文件作為資源使用,所以其根元素是ResourceDictionary,而不再是Window/Application等等。同時(shí),資源文件也可以相互的嵌套,比如上面的包含的Shared.xaml文件。然后定義了一個(gè)Style,注意這里的目標類(lèi)型為Control.Template,也就是針對所有的控件模板有效,所以Style添加了一個(gè)x:Key屬性。這樣就阻止Style適用于當前的所有控件。我們必須顯式的引用這個(gè)Style。相關(guān)內容,可以參考我前面的Style文章。

另一個(gè)需要說(shuō)明的是<ControlTemplate>的子元素,可以是任何的VisualTree。比如這里的Border,也可以是Grid等等。好了,現在定義了一個(gè)名為ButtonFocusVisual的模板,下面只需要引用它即可。

<Style TargetType="Button">
    <!--.............-->
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
    <!--.............-->
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="Button">

          <Border x:Name="Border" ......./>

          <ControlTemplate.Triggers>
            <Trigger Property="IsKeyboardFocused" Value="true">
              <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}" />
            </Trigger>           
          </ControlTemplate.Triggers>

        </ControlTemplate>
      </Setter.Value>
    </Setter>
</Style>

這是真正影響控件外觀(guān)的代碼。因為在定義Style的時(shí)候沒(méi)有指定具體的x:Key,所以將影響所有的Button。如你所見(jiàn),在FocusVisualStyle這個(gè)屬性(類(lèi)型是Style)上我們用資源方式引用了前面定義的命名Style:ButtonFocusVisual。接下來(lái)是定義Template,并為其子元素Border定義了一個(gè)名稱(chēng)。然后就是ControlTemplate的觸發(fā)器。在IsKeyboardFocused屬性滿(mǎn)足條件的情況下,我們把Border(注意這個(gè)Border不是類(lèi)型,而是具體的某個(gè)對象)的BorderBrush修改為另一個(gè)靜態(tài)資源。結合前面的Post,理解也就不難了。

最后,我們還會(huì )發(fā)現一個(gè)有趣的問(wèn)題:這個(gè)例子雖然是ControlTempalte,但工程名稱(chēng)卻是SimpleStyle,從這一點(diǎn)我們也可以看出:Style和Template通常是配合使用才能真正的實(shí)現豐富的自定義功能。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C# WPF 一個(gè)設計界面
WPF XAML 為項目設置全局樣式
繼續聊WPF——自定義CheckBox控件外觀(guān)
Wpf ScrollBar自定義樣式
定義和使用字典資源
WPF自定義控件庫之窗口
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久