在项模板中动态设置属性

时间:2013-10-06 00:42:22

标签: wpf datagrid listcollectionview

我使用以下资源在GroupItem中使用的StackPanel中设置Image的图像路径(这样可以正常工作):

<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Expander Name="expander" IsExpanded="True" >
                    <Expander.Header>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="pack://application:,,,/Resources/History.ico" Margin="2,0"  
                                   Width="18" Height="18" ></Image>
                            <TextBlock Text="{Binding Name}" Padding="2,0"/>
                        </StackPanel>
                    </Expander.Header>
                    <ItemsPresenter />
                </Expander>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

此DataGrid中使用了哪个:

    <DataGrid Name="JobHistory" CanUserAddRows="False" AutoGenerateColumns="False" ColumnWidth="*"
              CanUserDeleteRows="False" ItemsSource="{Binding}" Grid.Row="2" 
              Grid.ColumnSpan="5" CanUserResizeRows="False" 
              Grid.RowSpan="2" IsTextSearchEnabled="True" VerticalScrollBarVisibility="Visible"  >
        <DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <DataGridRowsPresenter/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </DataGrid.GroupStyle>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Status" Width="Auto" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding ResultImagePath}" Height="18" Width="18"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Job description" Binding="{Binding JobDescription}"/>
        </DataGrid.Columns>
    </DataGrid>

DataView通过以下代码进行分组:

    ListCollectionView collection = new ListCollectionView(JobData);
    collection.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
    JobHistory.ItemsSource = collection;

我的问题:如何在StackPanel中动态设置图像源?

<StackPanel Orientation="Horizontal">
  <Image Source="pack://application:,,,/Resources/History.ico" Margin="2,0"  
     Width="18" Height="18" ></Image>
  <TextBlock Text="{Binding Name}" Padding="2,0"/>
</StackPanel>

编辑1: 使用:

<UserControl.Resources>
            <Image x:Key="image" Source="pack://application:,,,/Resources/History.ico" Height="18" Width="18" Margin="2,0"/>
</UserControl.Resources>


<StackPanel Orientation="Horizontal">
    <ContentControl Content="{StaticResource ResourceKey=image}"/>
      Width="18" Height="18" ></Image>
    <TextBlock Text="{Binding Name}" Padding="2,0"/>
</StackPanel>

用户2760623建议的作品。

然而我的问题仍然存在。在任何给定时间,我有多个按“名称”分组的行。也可以有几个不同的组。根据作业当前状态,我想在GroupItem标题中更改图像。那么我如何确定哪个标题是“正确的”标题,以及如何操作那个单个标题呢?

1 个答案:

答案 0 :(得分:1)

将图像源作为动态资源,然后您可以更改它。只需执行以下操作:

  1. 定义命名空间 - xmlns:clr="clr-namespace:System;assembly=mscorlib"
  2. 添加为资源 - <clr:String x:Key="imageSource" >the path...</clr:String>
  3. 图像本身 - <Image Source="{DynamicResource ResourceKey=imageSource}"
  4. 当你想要改变它时 - this.Resources["imageSource"] = "another path..."
  5. 您也可以将整个图像作为资源(而不仅仅是图像路径)执行相同的概念,而不需要添加命名空间(上面的编号1)。并将其作为ContentControl的内容 - <ContentControl Content="{StaticResource ResourceKey=image}"/>