zoukankan      html  css  js  c++  java
  • 换整个Template和换Template里某个属性(项目)

    Bool?属性切换不同控件

    方法1:换整个某个Custom的control的整个Template可以用DataTemplateDataTrigger,用在collection里(ListView/DataGrid),特点是在Template外面,换Template


    例子:主要是换自定义的<Control>,用<DataTemplate.Triggers>换在DT里<Control>Template

    View Code
    <DataTemplate x:Key="SensorCheckRow_DataTemplate">
        <Control x:Name="SwitchControl">
          <Control.Template>
            <ControlTemplate TargetType="{x:Type Control}">
              <Rectangle HorizontalAlignment="Center" VerticalAlignment="Center"
                         Width="23"
                         Height="23"                        
                         Fill="{StaticResource Icon_Hover_Job}" />
            </ControlTemplate>
                    
          </Control.Template>
        </Control>
        <DataTemplate.Triggers>
          <DataTrigger Binding="{Binding Path=IsSensorCheckPassed}" Value="True">
            <Setter TargetName="SwitchControl" Property="Template" Value="{StaticResource TickIcon_ControlTemplate}"/>
          </DataTrigger>
          <DataTrigger Binding="{Binding Path=IsSensorCheckPassed}" Value="False">
            <Setter TargetName="SwitchControl" Property="Template" Value="{StaticResource ErrorIcon_ControlTemplate}"/>
          </DataTrigger>
          <DataTrigger Binding="{Binding Path=IsSensorCheckPassed}" Value="{x:Null}">
            <Setter TargetName="SwitchControl" Property="Template" Value="{StaticResource Empty_ControlTemplate}"/>
          </DataTrigger>
        </DataTemplate.Triggers>
      </DataTemplate>

    其各种模板的定义:注意x:Type要和上面DT里要换Template的Control类型一致

    View Code
     1 <ControlTemplate x:Key="Empty_ControlTemplate" TargetType="{x:Type Control}">
     2     <Grid/>
     3   </ControlTemplate>
     4   
     5   <ControlTemplate x:Key="ErrorIcon_ControlTemplate" TargetType="{x:Type Control}">
     6     <Rectangle HorizontalAlignment="Center" VerticalAlignment="Center"
     7                Width="23"
     8                Height="23"                        
     9                Fill="{StaticResource Icon_CrossForDataGrid}" />
    10   </ControlTemplate>
    11   
    12   <ControlTemplate x:Key="TickIcon_ControlTemplate" TargetType="{x:Type Control}">
    13     <Rectangle HorizontalAlignment="Center" VerticalAlignment="Center"
    14                Width="23"
    15                Height="23"                        
    16                Fill="{StaticResource Icon_TickForDataGrid}" />
    17   </ControlTemplate>
    18   
    19   <ControlTemplate x:Key="ProgramButton_ControlTemplate" TargetType="{x:Type Control}">
    20             <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
    21               <Button Width="76"
    22                             Height="26"
    23                             FontSize="10pt"
    24                             Command="{Binding Path=DataContext.ProgramToolCommand,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
    25                             CommandParameter="{Binding ToolName}"
    26                             Content="Program"
    27                             Style="{StaticResource General_Button_Style}" 
    28                             BorderBrush="#FF2F2F2F"/> 
    29           </Grid>
    30  </ControlTemplate>

    这样调用:

    1  <DataGridTemplateColumn 
    2               Width="*"
    3               IsReadOnly="True" 
    4               HeaderTemplate="{StaticResource SensorCheckHeader_DataTemplate}"
    5               CellTemplate="{StaticResource SensorCheckRow_DataTemplate}"/>
    View Code

    方法2:把不同状态下的Contorl叠在一起写在一个不带x:TypeControlTemplate里(即不是通用应用这个模板,而是通过Key来匹配),ControlTemplate的每一个子Tag都可以用x:Name在trigger中再定位ControlTemplate的DataTrigeer来切换各个control的Visibility。

    View Code
     1 <ControlTemplate x:Key="LoadingSpinner_ControlTemplate" >
     2               <Grid>
     3                <StackPanel x:Name="LoadingState" Orientation="Vertical">
     4                     <localUserControl:CircleLoadingAnimation  RenderTransformOrigin="0.5,0.5" 
     5                                                               Width="303.868" 
     6                                                               Height="150" 
     7                                                               Margin="0,-20,0,0">
     8                        <localUserControl:CircleLoadingAnimation.RenderTransform >
     9                            <TransformGroup>
    10                                <ScaleTransform ScaleX="0.2" ScaleY="0.2"/>
    11                            </TransformGroup>
    12                        </localUserControl:CircleLoadingAnimation.RenderTransform>
    13                    </localUserControl:CircleLoadingAnimation>
    14                     <TextBlock TextWrapping="Wrap" Text="Starting Electro-Hydraulic Lock Check" Style="{DynamicResource Univers55_TextBlock_Style}" Margin="300,-95,300,0" />
    15                 </StackPanel>
    16                 
    17                 <StackPanel x:Name="PassState" Orientation="Vertical" >
    18                 <ContentControl x:Name="LoadingSpinnerPass"
    19                                 Style="{StaticResource loadingSpinnerControlStyle}" 
    20                                 RenderTransformOrigin="0.5,0.5" 
    21                                                               Width="303.868" 
    22                                                               Height="150" 
    23                                                               Margin="0,30,0,0">
    24                     <ContentControl.RenderTransform>
    25                         <TransformGroup>
    26                             <ScaleTransform ScaleX="0.2" ScaleY="0.2"/>
    27                         </TransformGroup>
    28                     </ContentControl.RenderTransform>
    29                 </ContentControl>
    30                 <TextBlock TextWrapping="Wrap" Text="Check Passed" Style="{DynamicResource Univers55_TextBlock_Style}" Margin="300,0"/>
    31             </StackPanel>
    32             
    33                 <StackPanel x:Name="FailState" Orientation="Vertical" >
    34                     <ContentControl 
    35                                     x:Name="LoadingSpinnerFail"
    36                                     Style="{StaticResource loadingSpinnerControlStyle}" 
    37                                     RenderTransformOrigin="0.5,0.5" 
    38                                     Width="303.868" 
    39                                     Height="150" 
    40                                     Margin="0,30,0,0">
    41                         <ContentControl.RenderTransform>
    42                             <TransformGroup>
    43                                 <ScaleTransform ScaleX="0.2" ScaleY="0.2"/>
    44                             </TransformGroup>
    45                         </ContentControl.RenderTransform>
    46                     </ContentControl>
    47                     <TextBlock TextWrapping="Wrap" Text="Check Failed" Style="{DynamicResource Univers55_TextBlock_Style}" Margin="300,0"/>
    48                 </StackPanel>
    49             </Grid>
    50                 <ControlTemplate.Triggers>
    51                   <DataTrigger Binding="{Binding IsLockCheckStatus}" Value="{x:Null}">
    52                     <Setter TargetName="LoadingState" Property="Visibility" Value="Visible"/>
    53                     <Setter TargetName="PassState" Property="Visibility" Value="Collapsed"/>
    54                     <Setter TargetName="FailState" Property="Visibility" Value="Collapsed"/>
    55                   </DataTrigger>
    56                   <DataTrigger Binding="{Binding IsLockCheckStatus}" Value="True">
    57                     <Setter TargetName="PassState" Property="Visibility" Value="Visible"/>
    58                     <Setter TargetName="LoadingState" Property="Visibility" Value="Collapsed"/>
    59                     <Setter TargetName="FailState" Property="Visibility" Value="Collapsed"/>
    60                   </DataTrigger>
    61                   <DataTrigger Binding="{Binding IsLockCheckStatus}" Value="False">
    62                     <Setter TargetName="FailState" Property="Visibility" Value="Visible"/>
    63                     <Setter TargetName="LoadingState" Property="Visibility" Value="Collapsed"/>
    64                     <Setter TargetName="PassState" Property="Visibility" Value="Collapsed"/>
    65                   </DataTrigger>
    66                 </ControlTemplate.Triggers>
    67               </ControlTemplate>

    注意:ControlTemplate的DataTrigger最常用的还是Change模板里某一个元素的属性

    换ControlTemplate里某个元素的属性:一般用在同一个custom contro的某个元素的属性的改变,比变换buttoncommandparametercontent

    用在单个控件,特点是在Template里面,换Template里面的设置

    View Code
      <Style x:Key="AddToolOrUpdateToggleButton" TargetType="{x:Type ToggleButton}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ToggleButton}" >
                            <Button x:Name="AddToolOrUpdateButton"
                                    Width="110"
                                    Height="36"
                                    HorizontalAlignment="Right"
                                    Command="{Binding AddUpdateToolCommand}"
                                    KeyboardNavigation.TabIndex="4"
                                    Style="{StaticResource General_Button_Style}" 
                                    BorderBrush="#FF2F2F2F" />
                            <ControlTemplate.Triggers>
                                <DataTrigger Binding="{Binding IsAddTool}" Value="True">
                                    <Setter TargetName="AddToolOrUpdateButton" Property="Content" Value="Add Tool" />
                                    <Setter TargetName="AddToolOrUpdateButton" Property="CommandParameter" Value="AddTool" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding IsAddTool}" Value="False">
                                    <Setter TargetName="AddToolOrUpdateButton" Property="Content" Value="Update" />
                                    <Setter TargetName="AddToolOrUpdateButton" Property="CommandParameter" Value="UpdateTool" />
                                </DataTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

    方法3:ContentControl当作一个custom control,内部切换ContentTemplate

    利用了<ContentControl>可以是任何control的基类,创建我们自己的<ContentControl>与后台的VM下的Bool?bind在一起,切换<ContentControl>ContentTemplate属性DataTemplate类型的

    首先Resource中定义三种DT资源(注意一定要写DataType="{x:Type vmodel:ProgramResultViewModel})。

    x:Key="ProgramStatus_EqualTrue_View"
    
     1 <DataTemplate x:Key="ProgramStatus_EqualTrue_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
     2         <StackPanel x:Name="ProgramPassedPanel" Orientation="Vertical">
     3           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" Margin="0,20,0,0"><Run Text="This tool has been"/><LineBreak/><Run Text="successfully programmed."/></TextBlock>
     4 
     5           <Grid KeyboardNavigation.TabNavigation="None" 
     6                 Margin="0,20,0,0" 
     7                 HorizontalAlignment="Center" 
     8                 VerticalAlignment="Center">
     9             <Grid.ColumnDefinitions>
    10               <ColumnDefinition Width="*" />
    11               <ColumnDefinition Width="Auto" />
    12             </Grid.ColumnDefinitions>
    13             <Grid.RowDefinitions>
    14               <RowDefinition Height="*" />
    15               <RowDefinition Height="*" />
    16               <RowDefinition Height="*" />
    17               <RowDefinition Height="*" />
    18               <RowDefinition Height="*" />
    19             </Grid.RowDefinitions>
    20 
    21 
    22             <TextBlock FontSize="16pt" Margin="0,2" Foreground="#FF414142"
    23                        Style="{StaticResource Univers55_TextBlock_Style}" 
    24                        Text="Serial Number"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    25             <TextBlock  Grid.Column="1"
    26                         HorizontalAlignment="Left"
    27                         FontSize="16pt" Foreground="#FF6D6E71"
    28                         Style="{StaticResource Univers55_TextBlock_Style}"
    29                         Text="{Binding CurrentTool.SerialNumber}" VerticalAlignment="Center" Margin="15,5,0,5" />
    30 
    31             <TextBlock FontSize="16pt" Grid.Row="1" Margin="0,2"
    32                        Style="{StaticResource Univers55_TextBlock_Style}"
    33                        Text="Tool Name"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    34             <TextBlock  Grid.Column="1" Grid.Row="1"
    35                         HorizontalAlignment="Left"
    36                         FontSize="16pt" Foreground="#FF6D6E71"
    37                         Style="{StaticResource Univers55_TextBlock_Style}"
    38                         Text="{Binding CurrentTool.ToolName}" VerticalAlignment="Center" Margin="15,5,0,5" />
    39 
    40             <TextBlock FontSize="16pt" Grid.Row="2" Margin="0,2"
    41                        Style="{StaticResource Univers55_TextBlock_Style}"
    42                        Text="Ball Count"  VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="Light" />
    43             <TextBlock  Grid.Column="1" Grid.Row="2"
    44                         HorizontalAlignment="Left"
    45                         FontSize="16pt" Foreground="#FF6D6E71"
    46                         Style="{StaticResource Univers55_TextBlock_Style}"
    47                         Text="{Binding CurrentTool.BallCount}" VerticalAlignment="Center" Margin="15,5,0,5" />
    48 
    49             <TextBlock FontSize="16pt" Grid.Row="3" Margin="0,2"
    50                        Style="{StaticResource Univers55_TextBlock_Style}"
    51                        Text="Sleep Duration"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    52             <TextBlock  Grid.Column="1" Grid.Row="3"
    53                         HorizontalAlignment="Left"
    54                         FontSize="16pt" Foreground="#FF6D6E71"
    55                         Style="{StaticResource Univers55_TextBlock_Style}"
    56                         Text="{Binding CurrentTool.SleepDuration, StringFormat=\{0\} days}" VerticalAlignment="Center" Margin="15,5,0,5" />
    57 
    58             <TextBlock FontSize="16pt" Grid.Row="4" Margin="0,2"
    59                        Style="{StaticResource Univers55_TextBlock_Style}"
    60                        Text="Delay to Unlock"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    61             <TextBlock  Grid.Column="1" Grid.Row="4"
    62                         HorizontalAlignment="Left"
    63                         FontSize="16pt" Foreground="#FF6D6E71"
    64                         Style="{StaticResource Univers55_TextBlock_Style}"
    65                         Text="{Binding CurrentTool.DelayToUnlock, StringFormat=\{0\} second}" VerticalAlignment="Center" Margin="15,5,0,5" />
    66 
    67           </Grid>
    68           <Grid Margin="0,50,0,0" VerticalAlignment="Center">
    69             <Grid.ColumnDefinitions>
    70               <ColumnDefinition Width="*" />
    71               <ColumnDefinition Width="*" />
    72             </Grid.ColumnDefinitions>
    73             <Grid.RowDefinitions>
    74               <RowDefinition Height="*" />
    75             </Grid.RowDefinitions>
    76 
    77             <Button
    78               Grid.Column="1"
    79               TabIndex="1"
    80               Command="{Binding ShowViewCommand}"
    81               CommandParameter="JobSummary"
    82               Content="Ok"
    83               FontSize="16pt"
    84               Style="{StaticResource General_Button_Style}" 
    85               BorderBrush="#FF2F2F2F"
    86               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    87           </Grid>
    88         </StackPanel>
    89       </DataTemplate>
    View Code
    x:Key="ProgramStatus_EqualFalse_View"
     1 <DataTemplate x:Key="ProgramStatus_EqualFalse_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
     2         <Grid x:Name="ProgramFailedPanel">
     3           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,40"><Run Text="Programming failed."/><LineBreak/><Run Text="Please try again"/></TextBlock>
     4           <Grid VerticalAlignment="Bottom" Margin="0,0,0,20">
     5             <Grid.ColumnDefinitions>
     6               <ColumnDefinition Width="*" />
     7               <ColumnDefinition Width="*" />
     8             </Grid.ColumnDefinitions>
     9             <Grid.RowDefinitions>
    10               <RowDefinition Height="*" />
    11             </Grid.RowDefinitions>
    12 
    13 
    14             <Button
    15               Grid.Column="0"
    16               TabIndex="1"
    17               Command="{Binding ShowViewCommand}"
    18               CommandParameter="JobSummary"
    19               Content="Cancel"
    20               FontSize="16pt"
    21               Style="{StaticResource General_Button_Style}" 
    22               BorderBrush="#FF2F2F2F" HorizontalAlignment="Left" Width="90" Margin="20,0,0,0"/>
    23             <Button
    24               Grid.Column="1"
    25               TabIndex="1"
    26               Command="{Binding ShowViewCommand}"
    27               CommandParameter="JobSummary"
    28               Content="Retry"
    29               FontSize="16pt"
    30               Style="{StaticResource General_Button_Style}" 
    31               BorderBrush="#FF2F2F2F"
    32               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    33           </Grid>
    34         </Grid>
    35       </DataTemplate>
    View Code
    x:Key="ProgramStatus_EqualNone_View"
    1 <DataTemplate x:Key="ProgramStatus_EqualNone_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
    2         <Grid/>
    3       </DataTemplate>
    View Code
    
    

    使用的时候这样(要用ContentControl的ContentTemplate来承接上面的DT)

     1 <Grid>
     2         
     3           <ContentControl Content="{Binding}">
     4             <ContentControl.Style>
     5               <Style TargetType="{x:Type ContentControl}">
     6                 <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
     7                 <Style.Triggers>
     8                 <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
     9                     <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualTrue_View}"/>
    10                   </DataTrigger>
    11                 <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
    12                     <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualFalse_View}"/>
    13                   </DataTrigger>
    14                 <DataTrigger Binding="{Binding ProgramStatus}" Value="{x:Null}">
    15                   <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
    16                   </DataTrigger>
    17                 </Style.Triggers>
    18               </Style>
    19             </ContentControl.Style>
    20           </ContentControl>
    21         
    22       </Grid>
    View Code

    这是完整的code

      1 <UserControl x:Class="Halliburton.Wilma.Views.ProgramResultView"
      2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      6              xmlns:vmodel="clr-namespace:Halliburton.Wilma.ViewModels.Main;assembly=Halliburton.Wilma.ViewModels.Main"
      7              d:DesignHeight="620" 
      8              d:DesignWidth="1026"
      9              MinWidth="1026"
     10              MinHeight="620"
     11              mc:Ignorable="d">
     12   <UserControl.Resources>
     13     <ResourceDictionary>
     14       <ResourceDictionary.MergedDictionaries>
     15         <ResourceDictionary Source="/Halliburton.Wilma;component/MainViewResources/IconLibrary.xaml"/>
     16         <!--Add other ResourceDictionaries-->
     17       </ResourceDictionary.MergedDictionaries>
     18       <BooleanToVisibilityConverter x:Key="boolToVisibilityConverter" />
     19 
     20       <!--
     21          <Style x:Key="RetryButton_Style" TargetType="{x:Type ContentControl}">
     22          <Setter Property="Template">
     23          <Setter.Value>
     24          <ControlTemplate TargetType="{x:Type ContentControl}" >
     25          <Button x:Name="RetryButton"
     26          TabIndex="0"
     27          Command="{Binding ShowViewCommand}"
     28          CommandParameter="ConnectTool"
     29          Content="Retry"
     30          FontSize="16pt"
     31          Style="{StaticResource General_Button_Style}" 
     32          BorderBrush="#FF2F2F2F"
     33          />
     34          <ControlTemplate.Triggers>
     35          <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
     36          <Setter TargetName="RetryButton" Property="Visibility" Value="Collapsed" />
     37          </DataTrigger>
     38          <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
     39          <Setter TargetName="RetryButton" Property="Visibility" Value="Visible" />
     40          </DataTrigger>
     41          </ControlTemplate.Triggers>
     42          </ControlTemplate>
     43          </Setter.Value>
     44          </Setter>
     45          </Style>
     46          
     47          <Style x:Key="DisplayProgramStatus_Style" TargetType="{x:Type ContentControl}">
     48          <Setter Property="Template">
     49          <Setter.Value>
     50          <ControlTemplate TargetType="{x:Type ContentControl}" >
     51          <TextBlock  x:Name="DisplayStatus"
     52          HorizontalAlignment="Center"
     53          FontSize="17pt"
     54          FontFamily="/Halliburton.Wilma;component/Fonts/#Univers 65"
     55          Foreground="#FF414142"/>
     56          <ControlTemplate.Triggers>
     57          <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
     58          <Setter TargetName="DisplayStatus" Property="Text" Value="This tool has been successfully programmed." />
     59          </DataTrigger>
     60          <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
     61          <Setter TargetName="DisplayStatus" Property="Text" Value="This tool has not been programmed." />
     62          </DataTrigger>
     63          </ControlTemplate.Triggers>
     64          </ControlTemplate>
     65          </Setter.Value>
     66          </Setter>
     67          </Style>
     68       -->
     69 
     70       <DataTemplate x:Key="ProgramStatus_EqualTrue_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
     71         <StackPanel x:Name="ProgramPassedPanel" Orientation="Vertical">
     72           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" Margin="0,20,0,0"><Run Text="This tool has been"/><LineBreak/><Run Text="successfully programmed."/></TextBlock>
     73 
     74           <Grid KeyboardNavigation.TabNavigation="None" 
     75                 Margin="0,20,0,0" 
     76                 HorizontalAlignment="Center" 
     77                 VerticalAlignment="Center">
     78             <Grid.ColumnDefinitions>
     79               <ColumnDefinition Width="*" />
     80               <ColumnDefinition Width="Auto" />
     81             </Grid.ColumnDefinitions>
     82             <Grid.RowDefinitions>
     83               <RowDefinition Height="*" />
     84               <RowDefinition Height="*" />
     85               <RowDefinition Height="*" />
     86               <RowDefinition Height="*" />
     87               <RowDefinition Height="*" />
     88             </Grid.RowDefinitions>
     89 
     90 
     91             <TextBlock FontSize="16pt" Margin="0,2" Foreground="#FF414142"
     92                        Style="{StaticResource Univers55_TextBlock_Style}" 
     93                        Text="Serial Number"  VerticalAlignment="Center" HorizontalAlignment="Left" />
     94             <TextBlock  Grid.Column="1"
     95                         HorizontalAlignment="Left"
     96                         FontSize="16pt" Foreground="#FF6D6E71"
     97                         Style="{StaticResource Univers55_TextBlock_Style}"
     98                         Text="{Binding CurrentTool.SerialNumber}" VerticalAlignment="Center" Margin="15,5,0,5" />
     99 
    100             <TextBlock FontSize="16pt" Grid.Row="1" Margin="0,2"
    101                        Style="{StaticResource Univers55_TextBlock_Style}"
    102                        Text="Tool Name"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    103             <TextBlock  Grid.Column="1" Grid.Row="1"
    104                         HorizontalAlignment="Left"
    105                         FontSize="16pt" Foreground="#FF6D6E71"
    106                         Style="{StaticResource Univers55_TextBlock_Style}"
    107                         Text="{Binding CurrentTool.ToolName}" VerticalAlignment="Center" Margin="15,5,0,5" />
    108 
    109             <TextBlock FontSize="16pt" Grid.Row="2" Margin="0,2"
    110                        Style="{StaticResource Univers55_TextBlock_Style}"
    111                        Text="Ball Count"  VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="Light" />
    112             <TextBlock  Grid.Column="1" Grid.Row="2"
    113                         HorizontalAlignment="Left"
    114                         FontSize="16pt" Foreground="#FF6D6E71"
    115                         Style="{StaticResource Univers55_TextBlock_Style}"
    116                         Text="{Binding CurrentTool.BallCount}" VerticalAlignment="Center" Margin="15,5,0,5" />
    117 
    118             <TextBlock FontSize="16pt" Grid.Row="3" Margin="0,2"
    119                        Style="{StaticResource Univers55_TextBlock_Style}"
    120                        Text="Sleep Duration"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    121             <TextBlock  Grid.Column="1" Grid.Row="3"
    122                         HorizontalAlignment="Left"
    123                         FontSize="16pt" Foreground="#FF6D6E71"
    124                         Style="{StaticResource Univers55_TextBlock_Style}"
    125                         Text="{Binding CurrentTool.SleepDuration, StringFormat=\{0\} days}" VerticalAlignment="Center" Margin="15,5,0,5" />
    126 
    127             <TextBlock FontSize="16pt" Grid.Row="4" Margin="0,2"
    128                        Style="{StaticResource Univers55_TextBlock_Style}"
    129                        Text="Delay to Unlock"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    130             <TextBlock  Grid.Column="1" Grid.Row="4"
    131                         HorizontalAlignment="Left"
    132                         FontSize="16pt" Foreground="#FF6D6E71"
    133                         Style="{StaticResource Univers55_TextBlock_Style}"
    134                         Text="{Binding CurrentTool.DelayToUnlock, StringFormat=\{0\} second}" VerticalAlignment="Center" Margin="15,5,0,5" />
    135 
    136           </Grid>
    137           <Grid Margin="0,50,0,0" VerticalAlignment="Center">
    138             <Grid.ColumnDefinitions>
    139               <ColumnDefinition Width="*" />
    140               <ColumnDefinition Width="*" />
    141             </Grid.ColumnDefinitions>
    142             <Grid.RowDefinitions>
    143               <RowDefinition Height="*" />
    144             </Grid.RowDefinitions>
    145 
    146             <Button
    147               Grid.Column="1"
    148               TabIndex="1"
    149               Command="{Binding ShowViewCommand}"
    150               CommandParameter="JobSummary"
    151               Content="Ok"
    152               FontSize="16pt"
    153               Style="{StaticResource General_Button_Style}" 
    154               BorderBrush="#FF2F2F2F"
    155               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    156           </Grid>
    157         </StackPanel>
    158       </DataTemplate>
    159 
    160       <DataTemplate x:Key="ProgramStatus_EqualFalse_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
    161         <Grid x:Name="ProgramFailedPanel">
    162           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,40"><Run Text="Programming failed."/><LineBreak/><Run Text="Please try again"/></TextBlock>
    163           <Grid VerticalAlignment="Bottom" Margin="0,0,0,20">
    164             <Grid.ColumnDefinitions>
    165               <ColumnDefinition Width="*" />
    166               <ColumnDefinition Width="*" />
    167             </Grid.ColumnDefinitions>
    168             <Grid.RowDefinitions>
    169               <RowDefinition Height="*" />
    170             </Grid.RowDefinitions>
    171 
    172 
    173             <Button
    174               Grid.Column="0"
    175               TabIndex="1"
    176               Command="{Binding ShowViewCommand}"
    177               CommandParameter="JobSummary"
    178               Content="Ok"
    179               FontSize="16pt"
    180               Style="{StaticResource General_Button_Style}" 
    181               BorderBrush="#FF2F2F2F" HorizontalAlignment="Left" Width="90" Margin="20,0,0,0"/>
    182             <Button
    183               Grid.Column="1"
    184               TabIndex="1"
    185               Command="{Binding ShowViewCommand}"
    186               CommandParameter="ProgramTool"
    187               Content="Retry"
    188               FontSize="16pt"
    189               Style="{StaticResource General_Button_Style}" 
    190               BorderBrush="#FF2F2F2F"
    191               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    192           </Grid>
    193         </Grid>
    194       </DataTemplate>
    195 
    196       <DataTemplate x:Key="ProgramStatus_EqualNone_View" DataType="{x:Type vmodel:ProgramResultViewModel}">
    197         <Grid/>
    198       </DataTemplate>
    199 
    200       
    201 
    202     </ResourceDictionary>
    203   </UserControl.Resources>
    204 
    205   <Grid>
    206     <Grid.RowDefinitions>
    207       <RowDefinition Height="*"/>
    208       <RowDefinition Height="0.09*"/>
    209     </Grid.RowDefinitions>
    210     <Grid.Background>
    211       <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
    212         <GradientStop Color="#FFF0EFEF" />
    213         <GradientStop Offset="1" Color="#FFD0D0D1" />
    214       </LinearGradientBrush>
    215     </Grid.Background>
    216     <Border HorizontalAlignment="Center" Height="394" Margin="0,50,0,0" VerticalAlignment="Top" Width="585" BorderThickness="4">
    217       <Border.BorderBrush>
    218         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    219           <GradientStop Color="#FFBBBCBE" Offset="0"/>
    220           <GradientStop Color="#FFBBBDBF" Offset="1"/>
    221         </LinearGradientBrush>
    222       </Border.BorderBrush>
    223       <Border.Background>
    224         <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
    225           <GradientStop Offset="0" Color="#FFD0D2D3" />
    226           <GradientStop Offset="1" Color="#FFBBBDBF" />
    227         </LinearGradientBrush>
    228       </Border.Background>
    229 
    230       <Grid>
    231         
    232           <ContentControl Content="{Binding}">
    233             <ContentControl.Style>
    234               <Style TargetType="{x:Type ContentControl}">
    235                 <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
    236                 <Style.Triggers>
    237                 <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
    238                     <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualTrue_View}"/>
    239                   </DataTrigger>
    240                 <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
    241                     <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualFalse_View}"/>
    242                   </DataTrigger>
    243                 <DataTrigger Binding="{Binding ProgramStatus}" Value="{x:Null}">
    244                   <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
    245                   </DataTrigger>
    246                 </Style.Triggers>
    247               </Style>
    248             </ContentControl.Style>
    249           </ContentControl>
    250         
    251       </Grid>
    252 
    253     </Border>
    254     <Grid x:Name="BreadCrumb" Grid.Row="1" KeyboardNavigation.TabNavigation="None">
    255       <Rectangle x:Name="BreadCurmbBackground" Fill="#FF414041"/>
    256       <ContentControl Style="{StaticResource ProgramTool_MainBreadCrumbs_Style}" />
    257     </Grid>
    258   </Grid>
    259 </UserControl>
    View Code

    DT资源里的view tree下会bind到VM里的属性,由于是DP所以会自己向下寻找,但是Button的Command命令最好就bind当前VM object下的command

    方法4:ContentControl写在DT里,内部切换ContentTemplate,外部调用用该DT

    我之前做的方法是在最上面定义model层而不是vm层简写,而后DT的DataType属性设成了Tool类型,各种Textblockbind到当前vm下面的Tool属性,这样造成button的command binding出现错误,因为在Tool里面没有对应的Command

      1 <UserControl x:Class="Halliburton.Wilma.Views.ProgramResultView"
      2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      6              xmlns:model="clr-namespace:Halliburton.Wilma.Models.Main;assembly=Halliburton.Wilma.Models.Main"
      7              d:DesignHeight="620" 
      8              d:DesignWidth="1026"
      9              MinWidth="1026"
     10              MinHeight="620"
     11              mc:Ignorable="d">
     12   <UserControl.Resources>
     13     <ResourceDictionary>
     14       <ResourceDictionary.MergedDictionaries>
     15         <ResourceDictionary Source="/Halliburton.Wilma;component/MainViewResources/IconLibrary.xaml"/>
     16         <!--Add other ResourceDictionaries-->
     17       </ResourceDictionary.MergedDictionaries>
     18       <BooleanToVisibilityConverter x:Key="boolToVisibilityConverter" />
     19       
     20       <!--
     21          <Style x:Key="RetryButton_Style" TargetType="{x:Type ContentControl}">
     22          <Setter Property="Template">
     23          <Setter.Value>
     24          <ControlTemplate TargetType="{x:Type ContentControl}" >
     25          <Button x:Name="RetryButton"
     26          TabIndex="0"
     27          Command="{Binding ShowViewCommand}"
     28          CommandParameter="ConnectTool"
     29          Content="Retry"
     30          FontSize="16pt"
     31          Style="{StaticResource General_Button_Style}" 
     32          BorderBrush="#FF2F2F2F"
     33          />
     34          <ControlTemplate.Triggers>
     35          <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
     36          <Setter TargetName="RetryButton" Property="Visibility" Value="Collapsed" />
     37          </DataTrigger>
     38          <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
     39          <Setter TargetName="RetryButton" Property="Visibility" Value="Visible" />
     40          </DataTrigger>
     41          </ControlTemplate.Triggers>
     42          </ControlTemplate>
     43          </Setter.Value>
     44          </Setter>
     45          </Style>
     46          
     47          <Style x:Key="DisplayProgramStatus_Style" TargetType="{x:Type ContentControl}">
     48          <Setter Property="Template">
     49          <Setter.Value>
     50          <ControlTemplate TargetType="{x:Type ContentControl}" >
     51          <TextBlock  x:Name="DisplayStatus"
     52          HorizontalAlignment="Center"
     53          FontSize="17pt"
     54          FontFamily="/Halliburton.Wilma;component/Fonts/#Univers 65"
     55          Foreground="#FF414142"/>
     56          <ControlTemplate.Triggers>
     57          <DataTrigger Binding="{Binding ProgramStatus}" Value="True">
     58          <Setter TargetName="DisplayStatus" Property="Text" Value="This tool has been successfully programmed." />
     59          </DataTrigger>
     60          <DataTrigger Binding="{Binding ProgramStatus}" Value="False">
     61          <Setter TargetName="DisplayStatus" Property="Text" Value="This tool has not been programmed." />
     62          </DataTrigger>
     63          </ControlTemplate.Triggers>
     64          </ControlTemplate>
     65          </Setter.Value>
     66          </Setter>
     67          </Style>
     68       -->
     69 
     70       <DataTemplate x:Key="ProgramStatus_EqualTrue_View" DataType="{x:Type model:Tool}">
     71         <StackPanel x:Name="ProgramPassedPanel" Orientation="Vertical">
     72           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" Margin="0,20,0,0"><Run Text="This tool has been"/><LineBreak/><Run Text="successfully programmed."/></TextBlock>
     73              
     74           <Grid KeyboardNavigation.TabNavigation="None" 
     75                 Margin="0,20,0,0" 
     76                 HorizontalAlignment="Center" 
     77                 VerticalAlignment="Center">
     78             <Grid.ColumnDefinitions>
     79               <ColumnDefinition Width="*" />
     80               <ColumnDefinition Width="Auto" />
     81             </Grid.ColumnDefinitions>
     82             <Grid.RowDefinitions>
     83               <RowDefinition Height="*" />
     84               <RowDefinition Height="*" />
     85               <RowDefinition Height="*" />
     86               <RowDefinition Height="*" />
     87               <RowDefinition Height="*" />
     88             </Grid.RowDefinitions>
     89                         
     90                         
     91             <TextBlock FontSize="16pt" Margin="0,2" Foreground="#FF414142"
     92                        Style="{StaticResource Univers55_TextBlock_Style}" 
     93                        Text="Serial Number"  VerticalAlignment="Center" HorizontalAlignment="Left" />
     94             <TextBlock  Grid.Column="1"
     95                         HorizontalAlignment="Left"
     96                         FontSize="16pt" Foreground="#FF6D6E71"
     97                         Style="{StaticResource Univers55_TextBlock_Style}"
     98                         Text="{Binding SerialNumber}" VerticalAlignment="Center" Margin="15,5,0,5" />
     99                         
    100             <TextBlock FontSize="16pt" Grid.Row="1" Margin="0,2"
    101                        Style="{StaticResource Univers55_TextBlock_Style}"
    102                        Text="Tool Name"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    103             <TextBlock  Grid.Column="1" Grid.Row="1"
    104                         HorizontalAlignment="Left"
    105                         FontSize="16pt" Foreground="#FF6D6E71"
    106                         Style="{StaticResource Univers55_TextBlock_Style}"
    107                         Text="{Binding ToolName}" VerticalAlignment="Center" Margin="15,5,0,5" />
    108                                     
    109             <TextBlock FontSize="16pt" Grid.Row="2" Margin="0,2"
    110                        Style="{StaticResource Univers55_TextBlock_Style}"
    111                        Text="Ball Count"  VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="Light" />
    112             <TextBlock  Grid.Column="1" Grid.Row="2"
    113                         HorizontalAlignment="Left"
    114                         FontSize="16pt" Foreground="#FF6D6E71"
    115                         Style="{StaticResource Univers55_TextBlock_Style}"
    116                         Text="{Binding BallCount}" VerticalAlignment="Center" Margin="15,5,0,5" />            
    117                                     
    118             <TextBlock FontSize="16pt" Grid.Row="3" Margin="0,2"
    119                        Style="{StaticResource Univers55_TextBlock_Style}"
    120                        Text="Sleep Duration"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    121             <TextBlock  Grid.Column="1" Grid.Row="3"
    122                         HorizontalAlignment="Left"
    123                         FontSize="16pt" Foreground="#FF6D6E71"
    124                         Style="{StaticResource Univers55_TextBlock_Style}"
    125                         Text="{Binding SleepDuration, StringFormat=\{0\} days}" VerticalAlignment="Center" Margin="15,5,0,5" /> 
    126                         
    127             <TextBlock FontSize="16pt" Grid.Row="4" Margin="0,2"
    128                        Style="{StaticResource Univers55_TextBlock_Style}"
    129                        Text="Delay to Unlock"  VerticalAlignment="Center" HorizontalAlignment="Left" />
    130             <TextBlock  Grid.Column="1" Grid.Row="4"
    131                         HorizontalAlignment="Left"
    132                         FontSize="16pt" Foreground="#FF6D6E71"
    133                         Style="{StaticResource Univers55_TextBlock_Style}"
    134                         Text="{Binding DelayToUnlock, StringFormat=\{0\} second}" VerticalAlignment="Center" Margin="15,5,0,5" />
    135                           
    136           </Grid>
    137           <Grid Margin="0,50,0,0" VerticalAlignment="Center">
    138             <Grid.ColumnDefinitions>
    139               <ColumnDefinition Width="*" />
    140               <ColumnDefinition Width="*" />
    141             </Grid.ColumnDefinitions>
    142             <Grid.RowDefinitions>
    143               <RowDefinition Height="*" />
    144             </Grid.RowDefinitions>            
    145                     
    146             <Button
    147               Grid.Column="1"
    148               TabIndex="1"
    149               Command="{Binding ShowViewCommand}"
    150               CommandParameter="AddTool"
    151               Content="Ok"
    152               FontSize="16pt"
    153               Style="{StaticResource General_Button_Style}" 
    154               BorderBrush="#FF2F2F2F"
    155               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    156           </Grid>
    157         </StackPanel>
    158       </DataTemplate>
    159 
    160       <DataTemplate x:Key="ProgramStatus_EqualFalse_View" DataType="{x:Type model:Tool}">
    161         <Grid x:Name="ProgramFailedPanel">
    162           <TextBlock Style="{DynamicResource Univers65_TextBlock_Style}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,40"><Run Text="Programming failed."/><LineBreak/><Run Text="Please try again"/></TextBlock>
    163           <Grid VerticalAlignment="Bottom" Margin="0,0,0,20">
    164             <Grid.ColumnDefinitions>
    165               <ColumnDefinition Width="*" />
    166               <ColumnDefinition Width="*" />
    167             </Grid.ColumnDefinitions>
    168             <Grid.RowDefinitions>
    169               <RowDefinition Height="*" />
    170             </Grid.RowDefinitions>            
    171                     
    172                             
    173             <Button
    174               Grid.Column="0"
    175               TabIndex="1"
    176               Command="{Binding ShowViewCommand}"
    177               CommandParameter="JobSummary"
    178               Content="Cancel"
    179               FontSize="16pt"
    180               Style="{StaticResource General_Button_Style}" 
    181               BorderBrush="#FF2F2F2F" HorizontalAlignment="Left" Width="90" Margin="20,0,0,0"/>
    182             <Button
    183               Grid.Column="1"
    184               TabIndex="1"
    185               Command="{Binding ShowViewCommand}"
    186               CommandParameter="JobSummary"
    187               Content="Retry"
    188               FontSize="16pt"
    189               Style="{StaticResource General_Button_Style}" 
    190               BorderBrush="#FF2F2F2F"
    191               Margin="0,0,20,0" HorizontalAlignment="Right" Width="90"/>
    192           </Grid>
    193         </Grid>
    194       </DataTemplate>
    195 
    196       <DataTemplate x:Key="ProgramStatus_EqualNone_View" DataType="{x:Type model:Tool}">
    197         <Grid/>
    198       </DataTemplate>
    199 
    200       <DataTemplate x:Key="ProgramStatus_CurrentTool_DataTemplate" DataType="{x:Type model:Tool}">
    201         <ContentControl Content="{Binding}">
    202           <ContentControl.Style>
    203             <Style TargetType="{x:Type ContentControl}">
    204               <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
    205               <Style.Triggers>
    206                 <DataTrigger Binding="{Binding IsProgramed}" Value="True">
    207                   <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualTrue_View}"/>
    208                 </DataTrigger>
    209                 <DataTrigger Binding="{Binding IsProgramed}" Value="False">
    210                   <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualFalse_View}"/>
    211                 </DataTrigger>
    212                 <DataTrigger Binding="{Binding IsProgramed}" Value="{x:Null}">
    213                   <Setter Property="ContentTemplate" Value="{StaticResource ProgramStatus_EqualNone_View}"/>
    214                 </DataTrigger>
    215               </Style.Triggers>
    216             </Style>
    217           </ContentControl.Style>
    218         </ContentControl>
    219       </DataTemplate>
    220 
    221     </ResourceDictionary>
    222   </UserControl.Resources>
    223 
    224   <Grid>
    225     <Grid.RowDefinitions>
    226       <RowDefinition Height="*"/>
    227       <RowDefinition Height="0.09*"/>
    228     </Grid.RowDefinitions>
    229     <Grid.Background>
    230       <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
    231         <GradientStop Color="#FFF0EFEF" />
    232         <GradientStop Offset="1" Color="#FFD0D0D1" />
    233       </LinearGradientBrush>
    234     </Grid.Background>
    235     <Border HorizontalAlignment="Center" Height="394" Margin="0,50,0,0" VerticalAlignment="Top" Width="585" BorderThickness="4">
    236       <Border.BorderBrush>
    237         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    238           <GradientStop Color="#FFBBBCBE" Offset="0"/>
    239           <GradientStop Color="#FFBBBDBF" Offset="1"/>
    240         </LinearGradientBrush>
    241       </Border.BorderBrush>
    242       <Border.Background>
    243         <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
    244           <GradientStop Offset="0" Color="#FFD0D2D3" />
    245           <GradientStop Offset="1" Color="#FFBBBDBF" />
    246         </LinearGradientBrush>
    247       </Border.Background>
    248             
    249       <Grid>
    250         <ContentControl Content="{Binding CurrentTool}" 
    251                         ContentTemplate="{StaticResource ProgramStatus_CurrentTool_DataTemplate}"/>       
    252       </Grid>
    253                            
    254     </Border>
    255     <Grid x:Name="BreadCrumb" Grid.Row="1" KeyboardNavigation.TabNavigation="None">
    256       <Rectangle x:Name="BreadCurmbBackground" Fill="#FF414041"/>
    257       <ContentControl Style="{StaticResource ProgramTool_MainBreadCrumbs_Style}" />
    258     </Grid>
    259   </Grid>
    260 </UserControl>
    View Code

    上面虽然不成功,但是提供了另外一种使用ContentControl的实例。

    网上其他应用:

    http://rachel53461.wordpress.com/2011/05/28/switching-between-viewsusercontrols-using-mvvm/

    http://stackoverflow.com/questions/6114479/what-is-the-best-way-to-switch-views-usercontrols-in-mvvm-light-and-wpf

    http://stackoverflow.com/questions/6546436/mvvm-how-to-switch-between-views-using-datatemplate-triggers

    
    
  • 相关阅读:
    [LeetCode] 638. Shopping Offers
    [LeetCode] 1436. Destination City
    [LeetCode] 405. Convert a Number to Hexadecimal
    [LeetCode] 1909. Remove One Element to Make the Array Strictly Increasing
    [LeetCode] 1475. Final Prices With a Special Discount in a Shop
    [LeetCode] 650. 2 Keys Keyboard
    [LeetCode] 1382. Balance a Binary Search Tree
    [LeetCode] 917. Reverse Only Letters
    [LeetCode] 1189. Maximum Number of Balloons
    [LeetCode] 447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3062337.html
Copyright © 2011-2022 走看看