2016-02-04 20 views
0

試圖使用相同的控制用於與圖像和不顯示的列,這取決於一個布爾(HistoryOn)。接下來的xaml代碼工作,但總是顯示圖像。條件DataTemplate中用於圖像

<DataGridTemplateColumnx:Name="dgtc"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding 
       Converter={StaticResource myDataRowToListConverter}}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
          <Border x:Name="imageBorder" BorderThickness="1" BorderBrush="Black"         
            MouseLeave="imageBorder_MouseLeave" 
            MouseEnter="imageBorder_MouseEnter"Height="16"> 
          <Image x:Name="myImage" Source="{BindingMyImagePath}" 
           MouseUp="Image_MouseUp" HorizontalAlignment="Center"> 
          </Image> 
         </Border> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Next xaml代碼只顯示路徑,而不是圖像。哪裏不對?

<DataGridTemplateColumn x:Name="dgtc"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding 
       Converter={StaticResource myDataRowToListConverter}}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <ContentControl Content="{Binding MyImagePath}"> 
          <ContentControl.Style> 
           <Style TargetType="ContentControl"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding HistoryOn}" Value="true"> 
              <Setter Property="ContentTemplate" 
               Value="{StaticResource imagesOff}" /> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding HistoryOn}" Value="false"> 
              <Setter Property="ContentTemplate" 
               Value="{StaticResource imagesOn}" /> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </ContentControl.Style> 
         </ContentControl> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

在Windows.Resources:

<DataTemplate x:Key="imagesOn"> 
    <Border x:Name="imageBorder1" BorderThickness="1" BorderBrush="Black"          
      MouseLeave="imageBorder_MouseLeave" 
      MouseEnter="imageBorder_MouseEnter"Height="16"> 
     <Image x:Name="myImage" Source="{BindingMyImagePath}" 
       MouseUp="Image_MouseUp"HorizontalAlignment="Center"> 
     </Image> 
    </Border> 
</DataTemplate> 
<DataTemplatex:Key="imagesOff"> 
    <Border x:Name="imageBorder2" BorderThickness="1" BorderBrush="Black"          
      MouseLeave="imageBorder_MouseLeave" 
      MouseEnter="imageBorder_MouseEnter"Height="16"> 
    </Border> 
</DataTemplate> 
+0

簡單得多,只使用'imagesOn'的DataTemplate直接作爲ItemTemplate中(如在你的第一個XAML)和綁定Image控件與BooleanToVisibilityConverter的HistoryOn屬性的可見性屬性。或者使用圖像控件的樣式中的DataTriggers來設置其可見性。 – Clemens

+0

只能設置可見性避免長時間等待? HistoryOn表示顯示圖像的整個歷史記錄。只需要幾分鐘... –

+0

只要Image控件是不可見它不應該嘗試從綁定的路徑加載圖像。試一試。 – Clemens

回答

0

您可以使用CellTemplateSelector選擇根據不同的對象所需的模板看看this link看到關於這一主題 好運

一個詳細的例子
+0

太好了。這工作正常。關鍵是要找到SelectTemplate應具有的對象參數。它原來是一個DataRowView。 –