2010-02-16 3 views
0

저는 Silverlight를 배우고 있습니다 (처음부터 처음에는 물에서 물고기처럼 느껴집니다!). DataGrid 클래스를 살펴보고, 열과 열 머리글에 대한 사용자 지정 템플릿을 가지고 놀고 있습니다.DataGridTemplateColumn에서 파생 된 Silverlight 열 정의

헤더에 작은 이미지 (각 열에 대해 서로 다른 이미지)가있는 열의 모음과 셀의 표시 전용 값이있는 격자를 표시하려는 경우 각 열의 값이 다른 속성을 바인딩 된 데이터에 적용합니다.

나는 약간의 독서를했고, 아래 xaml과 함께 한 칼럼에서 일하도록했다. 내가 원한 것은이 열을 재사용 가능한 열의 일부로 묶은 다음 사용하려는 이미지와 바인딩 할 속성을 정의하는 값을 지정하여 그리드에 여러 인스턴스를 추가하는 것입니다.

누군가가 나를 도와 줄 수 있습니까? 저는 Silverlight 3.0을 사용하고 있습니다. 여기

내가 하나 개의 컬럼에 사용하고있어 XAML : 당신은 그리드의 각 COL에 같은 이미지를 가지고 것 의미 스타일로 실제 COL을 묶기

<data:DataGrid x:Name="_bidGrid" IsReadOnly="true" CanUserResizeColumns="False"> 
    <data:DataGrid.Columns> 
     <data:DataGridTemplateColumn> 
      <data:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding <bound property name goes here>}"/> 
       </DataTemplate> 
      </data:DataGridTemplateColumn.CellTemplate> 
      <data:DataGridTemplateColumn.HeaderStyle> 
       <Style TargetType="dataprimitives:DataGridColumnHeader"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <Image Source="<image url goes here>"/> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </data:DataGridTemplateColumn.HeaderStyle> 
     </data:DataGridTemplateColumn> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

답변

1

, 당신은 스타일을 정의 할 수 있습니다

이 전체 XAML 아래이 더 나은 설명
<data:DataGridTemplateColumn HeaderStyle="{StaticResource ProductNameColHeadStyle}" 

, 새로운 SL 프로젝트에서 MainPage.xaml에이 복사에 실행 : 각 DIFF COL 헤더를 들어, 당신이 당신의 COLS를 정의 다음 때 예를 들어, 스타일 번째 참조 할 수 있습니다 결과보기 ...

<UserControl x:Class="SilverlightApplication1.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 


    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
    xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
    xmlns:System_Windows_Controls_Primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls" 
    xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
    xmlns:System_Windows_Controls_DataVisualization_Charting_Primitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
    xmlns:inputToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 
    xmlns:dataPrimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"    
    mc:Ignorable="d" Width="400" Height="300"> 

    <Grid x:Name="LayoutRoot" Background="White"> 

     <Grid.Resources> 

      <Style x:Key="ProductNameColHeadStyle" TargetType="dataPrimitives:DataGridColumnHeader"> 
       <Setter Property="ContentTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <TextBlock Text="prod name image goes here"/> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

      <Style x:Key="ProductDescColHeadStyle" TargetType="dataPrimitives:DataGridColumnHeader"> 
       <Setter Property="ContentTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <TextBlock Text="prod description image goes here"/> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

     </Grid.Resources> 




     <data:DataGrid Name="dta" AutoGenerateColumns="False" > 

      <data:DataGrid.Columns> 

       <data:DataGridTemplateColumn HeaderStyle="{StaticResource ProductNameColHeadStyle}">      
        <data:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="Binding to prod name here"></TextBlock> 
         </DataTemplate> 
        </data:DataGridTemplateColumn.CellTemplate>      
       </data:DataGridTemplateColumn> 

       <data:DataGridTemplateColumn HeaderStyle="{StaticResource ProductDescColHeadStyle}"> 
        <data:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="Binding to prod desc here"></TextBlock> 
         </DataTemplate> 
        </data:DataGridTemplateColumn.CellTemplate> 
       </data:DataGridTemplateColumn> 

      </data:DataGrid.Columns> 

     </data:DataGrid> 

    </Grid> 


</UserControl> 
+0

응답 해 주셔서 감사합니다. 내가 바라는 것은 하나의 XAML 패키지에서 이미지 URL과 열 바인딩을 매개 변수화하는 방법이었습니다. 이 유형의 5 개 열을 사용하고 싶기 때문에 5 개의 스타일과 5 개의 템플릿 열로 연결되며 URL과 열 바인딩을 제외하면 모두 매우 유사하게 보입니다. DataGridTemplateColumn에서 파생 된 클래스를 작성하고 C#에서 헤더 스타일과 바인딩을 설정하여 클래스의 속성에 URL과 바인딩을 제공 할 수 있다고 생각합니다. 그러나 나는 XAML로 그것을 할 수 있기를 희망했다. –

+0

No probs Niall, 내가 어디서 왔는지 알 겠어. XAML의 많은 스타일과 양으로 끝날 수 있는데, 내가 1st에서 SL \ WPF를 시작했을 때, XAML과 Don에서 5 가지 스타일을 정의한다고 생각한다. XAML의 양에 대해 너무 걱정하지 않아도 스타일을 app.xaml로 옮길 수 있습니다. 그러면 적어도 사용자 정의 컨트롤을 복잡하게 만들지 않을 것이며 다른 화면에서도 사용할 수 있습니다. 동적 열을 추가하거나 더 많은 열이있는 경우 파생 클래스가 문제가되지 않습니다. –

관련 문제