<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      WPF--模板選擇

                 典型的,把模板關聯到一塊特定的數據上,不過通常希望動態的確定使用哪個模板---既可以基于一個屬性值,也可以是一個全局狀態。當真正需要大規模替換模板時,也可以使用DataTemplateSelector。

                 DataTemplateSelector提供了一個單一的方法----SelectTemplate,以允許通過執行任何邏輯來決定使用哪個模板??梢栽诒话脑刂胁檎夷0?,并返回一些硬編碼的模板,甚至動態的為每個條目創建模板。

               首先,創建一個繼承自DataTemplateSelector的類,并完成一些在幾個模板中進行旋轉的邏輯。在這個例子中,將找到XmlElement的LocalName,并從容器中獲取具有該名稱的資源,代碼如下:

       public class LocalNameTemplateSelector : DataTemplateSelector
          {
              public override DataTemplate SelectTemplate (object item,DependencyObject container)
       
              {
                  XmlElement data = item as XmlElement;
       
                  if (data != null)
                  {
                      return ((FrameworkElement)container).FindResource(data.LocalName) as DataTemplate;
                  }
                  return null;
              }
          }

           為了初始化所有的模板,將構建三個模板:用于書籍的棕色矩形,用于CD的銀色圓形以及用于DVD的藍色圓形。由于模板選擇器將查找XmlElement的本地名稱,所以需要為每個模板設置X:Key,代碼如下:

       <DataTemplate x:Key="Book" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                  <Rectangle Margin="2" Width="14" Height="14" Fill="Brown"/>
                  <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>
      
              <DataTemplate x:Key="CD" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                      <Ellipse Margin="2" Width="14" Height="14" Fill="Silver"/>
                      <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>
      
              <DataTemplate x:Key="DVD" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                      <Ellipse Margin="2" Width="14" Height="14" Fill="Blue"/>
                      <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>

      余下的就是把模板選擇器和ListBox進行關聯,而不是設置靜態模板,代碼如下:

       

       <ListBox ItemsSource="{Binding XPath=/Media/*}">
                  <ListBox.ItemTemplateSelector>
                      <l:LocalNameTemplateSelector xmlns:l="clr-namespace:WpfProgressBarDemo"/>
                  </ListBox.ItemTemplateSelector>
              </ListBox>

      前臺完整代碼如下:

      <Window x:Class="WpfProgressBarDemo.DataTemplateSelectorDemo"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:sx="clr-namespace:System.Xml;assembly=System.Xml"
             
              Title="DataTemplateSelector" Height="300" Width="300"
              
              DataContext="{DynamicResource dataSource}"
              >
          
          <Window.Resources>
              <!--數據源-->
              <XmlDataProvider x:Key="dataSource">
                  <x:XData>
                      <Media xmlns="">
                          <Book Author="Aretch" Title="WCF全面解析"/>
                          <Book Author="ByVoid" Title="Node.js開發指南"/>
                          <Book Author="Rogers Cardenhead" Title="21天學通Java"/>
                          <CD  Title="沒有CD了"/>
                          <DVD  Title="《十面埋伏》"/>
                      </Media>
                  </x:XData>
              </XmlDataProvider>
              <DataTemplate x:Key="Book" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                  <Rectangle Margin="2" Width="14" Height="14" Fill="Brown"/>
                  <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>
      
              <DataTemplate x:Key="CD" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                      <Ellipse Margin="2" Width="14" Height="14" Fill="Silver"/>
                      <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>
      
              <DataTemplate x:Key="DVD" DataType="{x:Type sx:XmlElement}">
                  <StackPanel Orientation="Horizontal">
                      <Ellipse Margin="2" Width="14" Height="14" Fill="Blue"/>
                      <TextBlock  VerticalAlignment="Center" Text="{Binding XPath=@Title}"></TextBlock>
                  </StackPanel>
              </DataTemplate>
          </Window.Resources>
          <Grid>
              <ListBox ItemsSource="{Binding XPath=/Media/*}">
                  <ListBox.ItemTemplateSelector>
                      <l:LocalNameTemplateSelector xmlns:l="clr-namespace:WpfProgressBarDemo"/>
                  </ListBox.ItemTemplateSelector>
              </ListBox>
          </Grid>
      </Window>

      效果如下:

      360軟件小助手截圖20130728130801

      好了完成了,本實例除了可以學怎樣動態進行模板選擇,哪還將學會怎樣使用XML數據綁定。另外為了使讀者能更好的理解,現提供另一個我項目中的例子供大家參考

      后臺:

        public class LocalNameTemplateSelector : DataTemplateSelector
          {
              public override DataTemplate SelectTemplate(object item, DependencyObject container)
              {
                  if (item != null && item is DeviceCheckInfo)
                  {
                      DeviceCheckInfo device = item as DeviceCheckInfo;
      
                      Window2 win = new Window2();
                      if (device.CheckResult)
                          return win.FindResource("dui") as DataTemplate;
                      else
                          return win.FindResource("cuo") as DataTemplate;
                  }
                  return null;
              }
          }
      
        public class DeviceCheckInfo
          {
              //設備名稱
              public string Name { get; set; }
              //檢測內容
              public string CheckContent { get; set; }
              //檢測結果
              public bool CheckResult { get; set; }
          }

      Xaml部分:

      <Window x:Class="WpfProgressBarDemo.Window2"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:WpfProgressBarDemo"
              Title="Window2" Height="433" Width="500" Loaded="Window_Loaded">
          <Window.Resources>
              <local:IShowTrueOrFalse x:Key="convetToImage"></local:IShowTrueOrFalse>
      
              <Style TargetType="TextBlock" >
                  <Setter Property="HorizontalAlignment" Value="Center"/>
                  <Setter Property="VerticalAlignment" Value="Center"/>
                  <Setter Property="Margin" Value="30"/>
                  <Setter Property="FontSize" Value="20"/>
              </Style>
      
              <DataTemplate x:Key="dui" DataType="{x:Type local:DeviceCheckInfo}" >
                  <StackPanel Orientation="Horizontal" CheckBox.Checked="StackPanel_Checked">
                      <TextBlock Text="{Binding Path=Name}" Margin="10"  VerticalAlignment="Center" FontSize="20"/>
                      <TextBlock Text="{Binding Path=CheckContent}" Margin="10" VerticalAlignment="Center" FontSize="20"/>
                      <Path x:Name="dui" Data="M43,5 L20,40 20,40 0,20 6,15 18,26 37,7 43,5 z" Fill="Green" Margin="5"  Stretch="Fill"/>
                      <CheckBox Name="checkbox" Checked="checkbox_Checked"/>
                  </StackPanel>
              </DataTemplate>
      
              <DataTemplate x:Key="cuo" DataType="{x:Type local:DeviceCheckInfo}">
                  <StackPanel Orientation="Horizontal">
                      <TextBlock Text="{Binding Path=Name}" Margin="10" VerticalAlignment="Center" FontSize="20"/>
                      <TextBlock Text="{Binding Path=CheckContent}" Margin="10" VerticalAlignment="Center" FontSize="20"/>
      
                      <Path Margin="5" Data="M50,25 L25,50 M25,25 50,50" Fill="#FFF4F4F5"  Height="40" Stretch="Fill" Stroke="Red"  Width="40" StrokeThickness="8"/>
                      <CheckBox Name="checkbox" Checked="checkbox_Checked"/>
                  </StackPanel>
              </DataTemplate>
              <local:LocalNameTemplateSelector x:Key="myDataTemplateSelector"/>
          </Window.Resources>
      
          <Grid>
              <ListBox Name="lbtest" ItemTemplateSelector="{StaticResource myDataTemplateSelector}" SelectionChanged="lbtest_SelectionChanged" />
             
                 </Grid>
      </Window>
      效果如下:
      360軟件小助手截圖20130728131741
      這個是自己畫了對勾和叉叉然后當模板了。
      posted @ 2013-07-29 07:52  幕三少  閱讀(3893)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 日韩人妻精品中文字幕专区 | 丽水市| 国产午夜成人久久无码一区二区| 1区2区3区4区产品不卡码网站| 韩国免费A级毛片久久| 久艹视频免费看| 国产天美传媒性色av高清| 国产不卡一区二区四区| 熟女丝袜潮喷内裤视频网站| 老妇女性较大毛片| 扒开双腿猛进入喷水高潮叫声| 人人澡人人妻人人爽人人蜜桃 | 亚洲男人天堂av在线| 宜兴市| 精品偷拍一区二区三区在| 人妻丝袜无码专区视频网站| 国产视频一区二区| 亚洲精品久久国产高清小说| 欧美交a欧美精品喷水| 久久99精品久久久久久琪琪 | 国产精品美女一区二三区| 好紧好滑好湿好爽免费视频| 欧美猛少妇色xxxxx| 亚洲人成亚洲人成在线观看| 日本高清久久一区二区三区| 最新国产精品拍自在线观看| 日本阿v片在线播放免费| 色偷偷久久一区二区三区| 在线涩涩免费观看国产精品| 国产免费毛卡片| 色爱av综合网国产精品| 亚洲老熟女一区二区三区| 99久久精品国产一区二区暴力| 岛国中文字幕一区二区| 亚洲欧美综合精品成| 国产男人的天堂在线视频| 国产亚洲精品一区二区不卡| 人妻av一区二区三区av免费| 亚洲欧美人成电影在线观看| 亚洲综合91社区精品福利| 欧美一区二区三区啪啪|